{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## HW2: Logistic回归&SVM\n",
    "#### 任务描述\n",
    "请在Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集）进行分类器练习。\n",
    "需要提交代码文件，并给出必要的结果解释。\n",
    "\n",
    "1. 训练数据和测试分割（随机选择20%的数据作为测试集）。（10分）\n",
    "2. 适当的特征工程（及数据探索）。（10分）\n",
    "3. Logistic回归，并选择最佳的正则函数（L1/L2）及正则参数。（30分）\n",
    "4. 线性SVM，并选择最佳正则参数，比较与Logistic回归的性能，简单说明原因。（20 分）\n",
    "5. RBF核的SVM，并选择最佳的超参数（正则参数、RBF核函数宽度）。（30 分）\n",
    "\n",
    "#### 数据说明：\n",
    "[原始数据集](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)\n",
    "\n",
    "数据集只有一个文件（diabetes.csv）：Pima Indians Diabetes Dataset包括根据医疗记录的比马印第安人5年内糖尿病的发病情况，这是一个两类分类问题。每个类的样本数目数量不均等。一共有 768 个样本，每个样本有8个输入变量和1个输出变量。缺失值通常用零值编码。\n",
    "\n",
    "*字段说明*\n",
    "\n",
    "- Pregnancies： 怀孕次数\n",
    "- Glucose： 口服葡萄糖耐受试验中，2小时的血浆葡萄糖浓度。\n",
    "- BloodPressure： 舒张压（mm Hg）\n",
    "- SkinThickness： 三头肌皮肤褶层厚度（mm）\n",
    "- Insulin：2小时血清胰岛素含量（μU/ ml）\n",
    "- BMI： 体重指数（体重，kg /（身高，m）^ 2）\n",
    "- DiabetesPedigreeFunction： 糖尿病家族史\n",
    "- Age： 年龄（岁）\n",
    "- Outcome： 输出变了/类别标签（0 或 1，出现糖尿病为1, 否则为 0）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import log_loss  \n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>116</td>\n",
       "      <td>74</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>25.6</td>\n",
       "      <td>0.201</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "5            5      116             74              0        0  25.6   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  \n",
       "5                     0.201   30        0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"diabetes.csv\")\n",
    "train.head(6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 各属性的统计特性\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Outcome分布\n",
    "sns.countplot(train.Outcome);\n",
    "pyplot.xlabel('target');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzAAAAKGCAYAAACV7H7HAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3Xd4FNXbxvHv2U1o0qQmoUhVOpGqgBQp0jvYEFGwAqIIKoiIiGBFVBT1/SFNBFGaFIGA9KL03jtphNBEQJLNef/IGggBREkyyXp/rmsvdmaemX3OMtnsmeecibHWIiIiIiIikh64nE5ARERERETkZqkDIyIiIiIi6YY6MCIiIiIikm6oAyMiIiIiIumGOjAiIiIiIpJuqAMjIiIiIiLphjowIiIiIiKSIowx3xhjjhtjtl1nuzHGfGqM2WeM2WKMqfR3x1QHRkREREREUspYoPENtjcBSnofTwOj/u6A6sCIiIiIiEiKsNYuA07eIKQVMN7GWwPkNMYE3uiY6sCIiIiIiIhTCgBHr1g+5l13XX4pmo78Z8ScOGCdzsFJd5d9xOkUHOVv3E6n4LiIi6ecTsFRcTbO6RQcF33hd6dTcJSfS58DmwqXczoFR/W7qHNg+pFZxukcrpQa388y5C3+DPFDv/7ytbX265R8TXVgRERERETkX/F2Vm6lwxIKFLpiuaB33XWpAyMiIiIi4oviPE5ncDN+AnoYYyYD1YEz1trwG+2gDoyIiIiIiKQIY8wkoC6QxxhzDHgT8Aew1n4JzAWaAvuA88ATf3dMdWBERERERHxRGpifaK19+G+2W6D7Pzmm7kImIiIiIiLphiowIiIiIiK+KM75CkxKUAVGRERERETSDVVgRERERER8kE0Dc2BSgiowIiIiIiKSbqgCIyIiIiLiizQHRkRERERExFmqwIiIiIiI+CLNgREREREREXGWKjAiIiIiIr4ozuN0BilCFRgREREREUk3VIEREREREfFFmgMjIiIiIiLiLFVgRERERER8kf4OjIiIiIiIiLNUgRERERER8UHWR+fAqAMjIiIiIuKLNIRMJO0ZMHQ4tZs9ROtOzzqdSoqpWe8eZq38nrlrfqBrz8eSbK98TzBTQsaxKXQFDZvXS1gfWDCAKSHj+HHReGYs/Y6OndukZtrJqka96kxfMYmZq7/niR6dkmyvdE9FvlvwDWuPLaVB87pJtt+WNQvzNkzn1aG9UyHb5FGvfi2Wr53Dqg3z6PFityTbM2Tw58tvPmLVhnnMWTiZgoWDAPDz8+OTUUP5ZeUMlv06i54vPQVAUIEAfpw1hqVrZrFk9U90ezbp+5iW1Ktfi5XrfmbNxvkJbbhShgz+fD1mOGs2zufnRd9TqHABANp1aM6i5dMTHuGndlC2fKlE+46f9AVLV/+UKu24FQ80qsv2bcvYtWMFr/TtnmR7hgwZ+G7iKHbtWMGqFbO4446CAOTKdTsLF/zA6ZN7+GTEkET7PPhgKzZuWMiG9SHMmfUtuXPfnipt+TcaNqzDli2L2b59GX36PJ9ke4YMGZgw4XO2b1/GsmUzE9pfpUpFfv31Z3799Wd++20eLVs+kGg/l8vFmjVzmTZtTKq0I7ncdl9lis77mmIh/yPX0x2SbM/RpgEl1kyiyMzPKDLzM3J0uKrdt2Wm+LLx5B/4XGqlnKzurlOJkYtH8cWyr2j7fPsk21t2a8Wniz7n4/mf8takIeQtkBeAImWK8u70D/hkYfy2mi1qpXbqkgLUgbkFxhiPMWaTMWabMeYHY0wWp3O6WcaYVU7nkBxaN23Il8OH/H1gOuVyuRjwbh+ee+QlWt73ME3bNKLYnUUSxYSHRjKg19vMnbYg0fqoyBM82qwb7et35uEmXenaszN58+dJxeyTh8vl4rVhL9PjkZdpV/tRGrdpcM334M1e7zBvesg1j/H8q0+xYc2mVMg2ebhcLoZ+OIBH2z9DneotaN2+KXfeVTxRzMOPtePM6bPUqNSYr78Yx4BBLwPQovUDZMiQgftrtuaBuh147ImOFCwcRGxsLG8NeJ8697SgWcOH6NLtkSTHTCtcLhfvfjSQR9o/xX3VmtOmXbMkuT7SuT2nT5/lnrsf4KsvxvHGW/Htn/rDbOrf14b697WhxzOvcuTwMbZv3ZWwX9MWDfnjj/Op2p5/w+Vy8ekn79C8RSfKV6zHgw+2pnTpkolinnziYU6dOkOpMrUY8en/MWzo6wBcvHiRNwe9zyuvvp0o3u128/FHg2nQsAOVKjdk67addH/+iVRr0z/hcrn45JMhtGr1OMHB9enYsSWlSiVuf5cuD3L69BnKlq3NZ5/9jyFD+gGwfftuatRoTvXqTWjZsjMjRw7D7XYn7Nejx5Ps3r0vVdtzy1wu8r/5PMeeGsiBps+SvXkdMhQvlCTs97nLONSqJ4da9eTMD/MTbcvzYmfOr92WWhknK5fLxdNDnuXtxwfxQv3u1GpZm4IlE7f/wPYD9GnWm5ceeIFVc1bSuX/8uX3pwp988tJwejXozuDOg3jyzafIkv02J5rhDBuX8g8HqANzay5Ya4OtteWAS0CiMoCJlybfY2ttDadzSA5VgsuTI3s2p9NIMeUrleHIwWMcOxxGbEwsP88I4f7GtRPFhB0NZ8+OfcTF2UTrY2NiibkUA0CGjP64XCbV8k5O5e4uzdGDxwg9Ev8ezJ+xiLoP3JcoJvxoBHt37k/yHgCUrnAXufPmYvXStamV8i27u3J5Dh04wpHDx4iJiWHm1J95oOn9iWIaN72fKZNmADB75gLuq3MPANZastyWGbfbTaZMGbl0KYZzZ//geOQJtm7eCcAf586zd88BAgLzpW7DblKlyhU4eOAIhw/Ft3/GtLk0blY/UUzjpvWZ8l18+2fNmE+tOvcmOU6b9s2YMXVuwnKW27LwbPcufPzBqJRtQDKoVvVu9u8/xMGDR4iJiWHKlJm0bJH4inrLFo2YMOEHAKZOncP99eKvLJ8/f4GVq9Zy8eKfieKNMRhjuO22+Gtt2bJlIywsMhVa889VrRqcqP0//DCLFi0aJYpp0aIR3377IwDTps2lXr2aAFy4cBGPJ/6vj2fKlBFrL38uFCgQQJMm9RkzZnIqtSR5ZKpwJ5cOhxFzNAJiYjk7ZxlZGyQ9568nY9kS+OXJyfkVG1Iwy5RTMrgk4YfCiTwSSWxMLCtmLaNao+qJYrat3sol7zm/Z+NucgfmBiDsYBjhh8IBOBV5kjMnzpAjV/bUbYAkuzT55TqdWg6UMMYUMcbsNsaMB7YBhYwxjYwxq40xG7yVmqwAxpimxphdxpj1xphPjTGzvesHGWO+McYsMcYcMMa88NeLGGNmeOO3G2OevmL9OWPMO8aYzcaYNcaY/N71+Y0x073rNxtjavwVf8W+fY0xa40xW4wxb3nX3WaMmePdZ5sx5sFUeA/lKvkC8hIRdjxhOTLsOPkC8t70/gFB+Zi2+FsWbviJ0SMnEBV5IiXSTFH5AvMSeeV7EH6cvIE39x4YY+g9qAfD3xqZUumliIDA/ISGRiQsh4dFJOlsBATmJ8wb4/F4OHv2d3LlysnsmQs4/8cFNu9eyrpti/jyszGcPn0m0b4FCwdRvnxpNqzfkvKN+RcCgvITFhqesBwWGkFAYP5EMYGB+Qj1xng8Hn73tv9Krdo2YfqPcxKWX3v9BUaNHMOFCxdTMPvkEVQggKPHwhKWj4WGExQUcN0Yj8fDmTNnbzgkLDY2lu49+7FpwyKOHt5AmdIl+WbMpJRpwC0KCgrg2BXtDw0NJygo/3Vj/voZ+Kv9VasGs2HDQtatW0DPnv0TOjQffDCI/v2HEpfO5gX4589NbMTlz+/YiBP458+dJC5bo5oU+elzgj7tj1+At+JuDPlf68bxd/+XWukmu1wBuTkRdrn90eHR5L5G+//S4MGGbFi8Psn6khVL4u/vR8ThiGvs5aPiPCn/cIA6MMnAGOMHNAG2eleVBL6w1pYF/gAGAA2stZWAdUBvY0wm4CugibW2MnD1N7JSwANANeBNY4y/d/2T3vgqwAvGmL9+gm8D1lhrKwLLgL8GjX8KLPWurwRsvyr3Rt58qwHBQGVjTG2gMRBmra3orTDN+/fvkDglIuw4bet1ouk97Wn1YFNy583ldEqpquMTbVmxaDXHw6OcTiXV3F25PHGeOIJL1aVaxUY806MLhb1zAyC+CjF6/CcM7D+Mc7//4WCmKatS5QpcOH+RXTv3AlC2fCmKFC3Mz7MXOpyZc/z8/Hj26c5UqfYAhe6oxJatO3nt1Z5Op5Ui1q7dRKVKDahZswV9+3YnY8aMNGlSn6ioE2zcuPXvD5AO/b74V/bX68Khlt05v3Ijge/FD6vM+Wgzzi1dR2xktMMZpo46bepSvEIJZnw1LdH62/PdTq8RvfmszyeJqnKSPqkDc2syG2M2Ed8pOQKM9q4/bK1d431+D1AGWOmNfRy4g/gOygFr7UFv3NWXweZYa/+01p4AjgN/XXp6wRizGVgDFCK+8wHxQ9hme5+vB4p4n98PjAKw1nqstYkvxUIj72MjsMGbV0niO2MNjTHvGWPuu8Z+GGOeNsasM8as+9/4tHkVL707HhFFQNDlK+/5g/JxPOKffxmPijzBvl0HqFS9YnKmlyqOh0eR/8r3IDAfUTfZIalQuRwPPtGOOWt/5KWB3WneoTEvvJ72b/gQER5JgQKXr7YHBgUQEX48SUyQN8btdpM9ezZOnjxNm/bNWLxoObGxsUSfOMnaXzdS8e5yQPwX2NHjRzDth9nMnZV2v8hHhEUSVCAwYTmoQAAR4YmHOoWHH6eAN8btdpPN2/6/tG7XlOlTL1dfqlQLpuLd5Vi7ZRE/zZtIsRJFmDZ7fAq35N8LC42gUMGghOWCBQIJC4u4bozb7SZHjuxER5+67jGDK5YF4MCBwwD8+OMs7r2ncnKnnizCwiIoeEX7CxQITDLc7cqYv34Grm7/7t37+OOPPyhb9i5q1KhCs2YN2b17JePHj6Ru3RqMGTMi5RuTDGIioy9XVAC/gDzEXNUhiTv9OzYmFoDTP8wnU7kSAGQOLs3tnZpT/Jcx5H2tK9lb1ydvny6plntyOBkRTZ6gy+3PHZib6Gt0yCrUqkj7Hh0Z1nUIsZdiE9ZnzpqZ18e8ycQPJrBn4+5UyTnN0BwYuYa/5sAEW2t7WmsveddfeVnTACFXxJWx1na9iWNfOXjZA/gZY+oCDYB7vRWVjUAmb0yMvXxJwcPN3yLbAMOuyK+EtXa0tXYP8RWbrcAQY8zAq3e01n5tra1ira3SrfPDN/ly8k9s27iTwsUKUaBwIH7+fjRp3ZDF85ff1L75A/OSMVNGALLnyMbd1SpyaP+RlEw3RWzftIvCxQoS5H0PHmhdnyULVtzUvq93f4umVdrRrGp7Ph78ObN/mMen73yZwhnfuk0btlG0+B0UuqMA/v7+tGrXhPk/L04UM//nxXR8uDUAzVs1YsWyXwEIPRZOzdrx82EyZ8lM5SoV2bf3AADDR77N3j0H+OrzcanYmn9u44atFCt+B4W97W/dtinz5/6SKGb+3F/o+Eh8+1u0foAVy9YkbDPG0LJNE2Zc0YEZN3oyFUvVpmqF+rRs/CgH9h2ibfPOqdOgf2Htuk2UKFGUIkUK4e/vT8eOrZg1O/GNOmbNXsBjj8Xfjapdu2YsXrLyhscMDYugdOmS5MkTX4lt0KA2u3alzcns69ZtTtT+Dh1aMHt24pt0zJ4dQqdO8Xejatu2KUuWxN+bpkiRQgmT9gsXLsCdd5bg8OGjvPHGe5QoUZ277qpJ5849WLJkFU888WLqNuxfurh1DxmKBOFfMD/4+5G9WW3OLVqTKMad9/Lwwaz1q3Np/1EAwvt8wP66Xdh//xNEvTuaszMWEfXh2NRM/5bt3byXwKJB5CuUHz9/P2q1qM3akN8SxRQtW4znhnVnaNe3ORN9+Zqrn78fr/3f6yyZ9gur5/rE/YsE/R2Y1LAG+NwYU8Jau88YcxtQANgNFDPGFLHWHgJuZo5JDuCUtfa8MaYU8dWdv7MIeA4YYYxxA1mvqqbMB942xky01p4zxhQAYog/N05aa781xpwGkt7HNQ3o++a7rN24hdOnz1K/dSee7/oY7a6a6JqeeTwehvb7kK8mf4Lb7WL6pNns332Q7q88xfbNu1gyfznlgkszYsx7ZM+ZjbqNatG971O0rvMIxUoWpe9bL2CtxRjD2FET2btzv9NN+sc8Hg/v9f+YLyYNx+V2M3PSbA7sPshzr3Rjx6ZdLF2wgjLBpRj+zTCy58xG7YY1ebZvN9rXSdu3Cb4Rj8dD/77vMGnq/+F2u5j87XT27NpH3/492LxxOwt+XsykCVP57Kv3WLVhHqdPnebZJ/sAMOZ/kxjx+TssWf0TxhgmT5zOzu17qHZPJTo81Iod23cTsjx+aMWwwSP4JWSZk029Jo/HQ78+bzN52mjcbheTvp3K7l37eKV/TzZv3Mb8nxfz3YQfGfn1+6zZOJ/Tp87wzJOXb5F9b82qhIWGc/jQMQdbcWs8Hg+9XhzA3Dnf4Xa5GDvue3bs2MOgN/uwbv1mZs8O4Zsxkxk39lN27VjBqVOneaTT5VsN79uzhuzZs5IhQwZatWxMk2YPs3PnXt4e8jGLf5lGTEwMR46E8mTXlxxs5fV5PB5efPENZs2agNvtZty479m5cw8DB/Zm/fqtzJkTwtix3/PNNyPYvn0ZJ0+epnPnHgDUqFGVPn2eJyYmhri4OHr1ev2Glal0wRNH5OBRFBo9BNwuzvy4gEv7jpDnhU5c3LaXc7/8Sq7Orch6f3Wsx4Pn9O+Evzbc6ayTTZwnjv9740venPAWLreLRd8v5OieIzzc+1H2bd3L2pDfePz1J8iUJRN9R70GQFRYFMO6DqFm81qUqVaWbDmzcX/7+JuBfPryCA7tOHijl/Qd6Wy+180yGgf47xljzllrs161rggw2ztv5K919wPvARm9qwZYa38yxrQAPiC+YrMWyGatfdQYMwg4Z6390Lv/NqA5EA7MIH542G4gJzDIWrvkylyMMe2B5tbaLt7J/F8DxYivzDxnrV19VXwvLndQzgGdgBLe3OKI79A8Z61dd733IubEgf/0iXR32UecTsFR/sb990E+LuJiOv+CdIvifPSvPf8T0Rd+dzoFR/m59DmwqXC5vw/yYf0u6hyYfmRWmrrl55/bF6X497OMZeunepvVgXGQMSart+phgM+Bvdbaj53O699QB0YdmP86dWDUgVEHRp8D6sDoHEhzHZhtISnfgSnXMNXbrDkwznrKO7F/O/HDw75yOB8RERERkTRNc2Ac5K22pMuKi4iIiIikcT46B0YVGBERERERSTdUgRERERER8UHWepxOIUWoAiMiIiIiIumGKjAiIiIiIr7IR+8QqQqMiIiIiIikG6rAiIiIiIj4It2FTERERERExFmqwIiIiIiI+CIfnQOjDoyIiIiIiC+K022URUREREREHKUKjIiIiIiIL/LRIWSqwIiIiIiISLqhCoyIiIiIiC/SbZRFREREREScpQqMiIiIiIgv0hwYERERERERZ6kCIyIiIiLiizQHRkRERERExFmqwIiIiIiI+CJVYERERERERJylCowki7vLPuJ0Co7auP07p1NwVI0KXZxOwXEXYy85nYKjeuap7nQKjtua46zTKTjqwKVop1Nw3PuXsjidgqOe+1NfK9Maaz1Op5AiVIEREREREZF0Q11lERERERFfpDkwIiIiIiIizlIFRkRERETEF1lVYERERERERBylCoyIiIiIiC/SHBgRERERERFnqQIjIiIiIuKLfHQOjDowIiIiIiK+SEPIREREREREnKUKjIiIiIiIL/LRIWSqwIiIiIiISLqhCoyIiIiIiC/SHBgRERERERFnqQIjIiIiIuKLVIERERERERFxliowIiIiIiK+SHchExERERERcZYqMCIiIiIivkhzYERERERERJylCoyIiIiIiC/SHBgRERERERFnqQIjaV7Nevfw2pCXcLtdTJ34E6M/m5Boe+V7gnn17Ze4s0xx+j7zBiGzFwMQWDCAT8a8h8tl8PPz47vRPzBl/HQnmpBiBgwdzrKVv5Hr9pzM+PZLp9NJMffWrcbLb7+Ay+Vi5qQ5jBs5MdH2u6tXpPfgnpQoXYzXn3uLX+YsTdi25uhi9u86AEBE6HFe7tIvVXP/t+o3qM2w9wfgdruZMG4KI4Z/lWh7hgwZGPV/HxAcXI6TJ0/x5OO9OHoklEKFC/Dr+vns2xvf5nVrN9G710CyZr2NuQsmJewfVCCAKZNn0v/Vd1K1Xf9WiToVaDrwMYzbxYbvl7B81KxE26s8Wp/qjzUkLi6OS39c5Kd+o4naF0qBisVoOawbAMbA4hHT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/gKbNmxj3s+/MHH8D3zx9Qf8timE06fO8NQTLwFw5vRZRn0+hpAlU7HWsnDBUkLmLyFLlsz8MH00fv5+uN1uli5Zxfixaf///1ZYHxwqC2Cs9c3S0r/lHcr11zwUA/S31s4xxhQBZltryxljMgGjgCrEVzZ6ezsR11ufGRgDVCS+01GA+Dkq64wxh4Aq1trLs/Pi8zhnrc16xXIw8cPQchDf8RwBjAUWe9cZ4Ftr7bvGmM+AekAcsB3o4p0j8z7QBjgInAN+staOvToHY0xRbzsCAX9gsrV28I3et7sDav6nTyQ/V5q6eVuqW7VlrNMpOK5VpR5Op+CoLeeOOJ2C41pkT/u3J05J44//9vdBPq553mCnU3DUolPp5zbNKeXE2T1/O2Y/NZ3r1y7Fv59lHTY11dusCsxVrLXX/CZqrT1E/DwUrLUXgSR/DewG6y8QXx251nGLXGd91quWNxE/l+ZqSW4tZa295mUoa+0rQJLZvVfnYK09CDS+1jFEREREJJ3QHBgRERERERFnqQIjIiIiIuKLVIERERERERFxliowIiIiIiK+yPrmXchUgRERERERkXRDFRgREREREV+kOTAiIiIiIiLOUgVGRERERMQHWR+twKgDIyIiIiLii3y0A6MhZCIiIiIikm6oAiMiIiIi4ovidBtlERERERERR6kCIyIiIiLiizQHRkRERERExFmqwIiIiIiI+CJVYERERERERJylCoyIiIiIiA+yVhUYERERERERR6kCIyIiIiLiizQHRkRERERExFmqwIiIiIiI+CJVYERERERERJylCowki4iLp5xOwVEXYy85nYKjWlXq4XQKjpu5YaTTKThqVrkBTqfguKjY//Y1wV25SjqdguM2nj/mdAqOcpv/9s9AWmRVgREREREREXGWKjAiIiIiIr5IFRgRERERERFnqQIjIiIiIuKL4pxOIGWoAiMiIiIiIumGKjAiIiIiIj5IdyETERERERFxmCowIiIiIiK+yEcrMOrAiIiIiIj4Ik3iFxERERERcZYqMCIiIiIiPkiT+EVERERERBymCoyIiIiIiC/SHBgRERERERFnqQIj/8/efYdHUXVxHP/e3SQUaVJT6L0TICBNeofQQURUFLBQxAIqVVQEKzYQwVcEFUGlSicgRZoCgYD0FpA0akCaJpt5/0gIWQOKkuyS5fd5nn3IzD0z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q2VZP/wldg3/MIBRBeYuYFmW/Sbrw0ks2f11/TRgWtLPo9MvMxERERHxdJZlLQGW/GXdqJvENvyn/WkAIyIiIiLigaw7qh6UdnQRv4iIiIiIZBiqwIiIiIiIeCBPvV2BKjAiIiIiIpJhqAIjIiIiIuKBVIERERERERFxM1VgREREREQ8kKd+SZ8qMCIiIiIikmGoAiMiIiIi4oES9D0wIiIiIiIi7qUKjIiIiIiIB9JdyERERERERNxMFRgREREREQ+kCoyIiIiIiIibqQIjIiIiIuKB9D0wIiIiIiIibqYKjIiIiIiIB/LU74HRAEZERERExAPpIn4RERERERE3UwVGRERERMQD6SJ+ERERERERN1MFRkRERETEAyV4aA1GAxhJE142u7tTcKsjf55xdwputeJCpLtTcLt9uUu5OwX38sxj5L9Ss+LD7k7BrX759St3p+B22Qs2dHcKbrU97rS7U5C7hAYwIiIiIiIeSHchExERERERcTNVYEREREREPJCnzu5VBUZERERERDIMVWBERERERDyQroERERERERFxM1VgREREREQ8UIJxdwbpQxUYERERERHJMFSBERERERHxQAkeeh8yVWBERERERCTDUAVGRERERMQDeWb9RRUYERERERHJQFSBERERERHxQPoeGBERERERETdTBUZERERExAPpLmQiIiIiIiJupgqMiIiIiIgH8sz6iwYwIiIiIiIeSRfxi4iIiIiIuJkqMCIiIiIiHkgX8YuIiIiIiLiZKjAiIiIiIh7IM+svqsDIHapZswbs3Lma3bvXMXhwv1TtPj4+fPXVRHbvXse6dQsoUqQgAEFBVfj556X8/PNSfvllGe3atXDazmazsXnzEubO/cIl/UgLdRrdx4L1M1m46TseH/BwqvZqtQKZteILtp1YR9O2jVK135MtKytC5zN07POuSDdNNGvWgO07VrFz1xpeeOHpVO0+Pj5M/3ICO3etYc3a+RQuXNCpvWBBf2JO7mbQoL7J6yZ9+jbh4VvZsmV5uuef1mo0DGL62ql8vX4aD/Z/IFV75fsqMXnpJ6wMX0b9Nvc7tT05vA9frPqMaas/Z+Brqf+WMoLb6f8Tw/owdeUUpq6cQqPgBq5KOc3VaXQf89bPZMGmb3lsQM9U7dVqVeGbFVPZcmItTds2TNV+T7asLAudx0sZ6H3g3xgxdjz1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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pyplot.subplots(figsize=(13, 9))\n",
    "train_coor=train.corr().abs()\n",
    "sns.heatmap(train_coor,annot=True)\n",
    "\n",
    "pyplot.savefig('diabetes_coor.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pregnancies and Age = 0.54\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/seaborn/axisgrid.py:2065: UserWarning: The `size` parameter has been renamed to `height`; pleaes update your code.\n",
      "  warnings.warn(msg, UserWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGoCAYAAADvp1oKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzt3X10XPV5J/DvMxpJ6MXEsiwLsHltiN0055RilYWS9rChy5JsNiRplyRdg9Pk2Ly0p8nmtA2nbbpp0+4m7W53t91iA0lbSLK85IXCSds0bDbZttlAKwgkkNjYUDvYgCXLNlgvlmbmPvvHXImxNJJnrp8795n7+37O8bE9Gv38uy8zj+ber5+fqCqIiIiyUMh6AkREFC4WISIiygyLEBERZYZFiIiIMsMiREREmWERIiKizLAIERFRZliEiIgoMyxCRESUmWLWE2jEtddeq1/96lezngYRETVGGn1iW3wSOnz4cNZTICKiFLRFESIionxiESIiosywCBERUWZYhIiIKDMsQkRElBkWISIiygyLEBERZYZFiIiIMsMiREREmWERIiKizLAIERFRZliEiIgoM23RRZsoRFGkmJiaw1y5gq5iBwb7ulAoNNycmKgtsAgRORRFit2HjmPbPaM4cHQGGwZ6cNeNI9g4vIqFiHKFl+OIHJqYmlsoQABw4OgMtt0ziompuYxnRmSLRYjIoblyZaEAzTtwdAZz5UpGMyJKB4sQkUNdxQ5sGOg56bENAz3oKnZkNCOidKRahETkP4jIMyLytIjcKyJniMiFIvKYiOwVkftFpCvNORC1o8G+Ltx148hCIZq/JzTYx5cL5YuoajoDi6wH8A8A3qiqMyLyAIC/BvA2AF9W1ftEZCeAp1R1x0pjjYyM6OjoaCrzJPKK6ThqYw2fqGlfjisC6BGRIoBeAC8BeAuAL8ZfvxvAO1OeA1FbKhQEQ6u6sX6gF0OrulmAKJdSK0KqehDAfwHwQ1SLzysAHgdwTFXL8dMOAFif1hyIiMi31IqQiAwAuA7AhQDOAdAH4Nomvn+7iIyKyOj4+HhKsyQioiyleTnuZwH8s6qOq2oJwJcBXAlgdXx5DgA2ADhY75tV9U5VHVHVkaGhoRSnSUREWUmzCP0QwOUi0isiAuBqAN8H8A0APx8/ZyuAh1KcAxEROZbmPaHHUA0gPAHge/G/dSeAjwL4iIjsBTAI4DNpzYGIiHxLLaJtiRFtIqK24iaiTUREtCwWISIiygyLEBERZYZFiIiIMsMiREREmWERIiKizLAIERFRZliEiIgoMyxCRESUGRYhIiLKDIsQERFlhkWIiIgywyJERESZYREiIqLMsAgREVFmWISIiCgzLEJERJQZFiEiIsoMixAREWWGRYiIiDLDIkRERJlhESIiosywCBERUWZYhIiIKDMsQkRElBkWISIiygyLEBERZYZFiIiIMsMiREREmWERIiKizLAIERFRZliEiIgoMyxCRESUGRYhIiLKDIsQERFlhkWIiIgywyJERESZYREiIqLMFLOeQMiiSDExNYe5cgVdxQ4M9nWhUJCsp0VE1DIsQhmJIsXuQ8ex7Z5RHDg6gw0DPbjrxhFsHF7FQkREweDluIxMTM0tFCAAOHB0BtvuGcXE1FzGMyMiah0WoYzMlSsLBWjegaMzmCtXMpoREVHrsQhlpKvYgQ0DPSc9tmGgB13FjoxmRETUeixCGRns68JdN44sFKL5e0KDfV0Zz4yIqHUYTMhIoSDYOLwKD956JdNxRBQsFqEMFQqCoVXdWU+DiCgzvBxHRESZYREiIqLMpFaERGSjiDxZ8+tVEfmwiKwRkUdEZE/8+0BacyAiIt9SK0KqultVL1HVSwBsBjAN4EEAtwH4uqpeDODr8d/JmShSjB+fxcGj0xg/Poso0qynREQ51KpgwtUAnlPV/SJyHYCr4sfvBvBNAB9t0TyoAWwpRESt0qp7Qu8FcG/852FVfSn+88sAhls0B2oQWwoRUaukXoREpAvAOwB8YfHXVFUB1L3OIyLbRWRUREbHx8dTniXVYkshImqVVnwSeiuAJ1T1UPz3QyJyNgDEv4/V+yZVvVNVR1R1ZGhoqAXTpHlsKURErdKKIvQ+vHYpDgAeBrA1/vNWAA+1YA7UBLYUIqJWkeoVsZQGF+kD8EMAF6nqK/FjgwAeAHAegP0ArlfVIyuNMzIyoqOjo6nNk5ayXHCvXI4wNjmLUiVCZ0cB6/q7USzyv6gR5VjDbxappuNUdQrA4KLHJlBNy5FjVi2FyuUIuw4dx82fe3whabdzy2ZsGl7FQkRE7JhA6RqbnF0oQEA14HDz5x7H2ORsxjMjIg9YhChVpUpUN2lXrkQZzYiIPGERolR1dhTqJu2KHTz1iIhFiFK2rr8bO7dsPilpt3PLZqzrz+cSFmx3RNQcridEqSoWC9g0vAoP3HQFypUIxRyn49juiKh5+XsnIHeKxQLOWd2D8wb7cM7qnlwWIIDtjoiSyOe7AVEG2O6IqHksQkRG2O6IqHksQkRG2O6IqHm5DiZYtp4JDfdd8woFwcVD/UtCGNxvRMvLbRFiUik57rtkokixZ3yS+42oCbm9HMekUnLcd8lwvxE1L7dFiEml5LjvkuF+I2pebosQk0rJcd8lw/1G1LzcFiEmlZLjvkuG+42oeakuamcl6aJ23hNenufneW6lUgVjk7MoR4piQbCuvxudnT4+bXjeb0Qt5GNRu6xZLcyWBu8JNK/7rlSqYNfYJG6pWSRvx5bN2LSu30Uh8rrfiLzK7eU475ikSmZscnahAAHV/XYLF8kjalssQhlhkiqZcqT1F8njkglEbYlFKCNMUiVTLEj9RfIcXMIkoublugh5XmAspCRVuRzhxWMz2D8xhRePzaBcTr6097r+buxYtEjejhwvkkeUd7lNx3m/8Q+EkaQqlyPsOnQcN9cECXZu2YxNw6sSryvkOR1HRACaSMfl9pNQO9z4n09SrR/oxdCqfDa6HJucXShAQPU43HyaQYLOzg6sH+jF+YN9WD/QywJE1MZyW4R449+HUiWqHySoJL8kR0T5kdsixBv/PnR2FOoHCTpye+oRURNy+04Q0o1/z9b1d2PnoiDBTgYJiCiW22ACEMaN/3ZQLkfVIEHNQm9JQwne8ZwjAsC2PVVsoeJDsVjAOat7Tv3ENtcOiUwib/L54yhRBtohkUnkDYsQkREmMomaxyJEZISJTKLmsQgRGWEik6h5uQ4mhMQ6lWU5XiiJsUJBsHF4FR689UqX2xrKcaD2wiKUA9apLMvxQkuMeU1khnYcqH3wclwOWKeyLMdjYswHHgfyikUoB6xTWZbjMTHmA48DecUilAPWqSzL8ZgY84HHgbxiEcoB61SW5XhMjPnA40BesXdcTsYLaW6UjOfj4HlulAh7x3lOjKUxnnUqy3I8r4mx0Hg9DkzuhS23l+M8J8bSGI+oXfG1ELbcFiHPibE0xiNqV3wthC23RchzYiyN8YjaFV8LYcttEfKcGEtjPGtRpBg/PouDR6cxfnwWUeQ/wJJEKNvpmffXAqWL6bgcjWcllBvFoWxnO/D6WqDEGj54uS5ClMz48Vm86/ZvnXSdfsNADx689UqX6aqkQtlOogw0XIRyezmOkgvlRnEo20nkGYsQLRHKjeJQtpPIs1SLkIisFpEvisguEfmBiFwhImtE5BER2RP/PpDmHKh5odwoDmU7iTxL9Z6QiNwN4O9V9dMi0gWgF8BvADiiqp8UkdsADKjqR1cah/eEWq9cjjA2OYtyJUKxo4B1/d0oFpP9zOI50GG5ndZzI2pj2bftEZHXAfgZAO8HAFWdAzAnItcBuCp+2t0AvglgxSJErRVFij3jky4XtbNecM9qO63nRhSKNC/HXQhgHMCfi8h3ROTTItIHYFhVX4qf8zKA4RTnQAl4XtQulLkRhSLNIlQEcCmAHar6EwCmANxW+wStXgusez1QRLaLyKiIjI6Pj6c4TVrM86J2ocyNKBRpFqEDAA6o6mPx37+IalE6JCJnA0D8+1i9b1bVO1V1RFVHhoaGUpwmLeZ5UbtQ5kYUitSKkKq+DOAFEdkYP3Q1gO8DeBjA1vixrQAeSmsOlIznRe1CmRtRKNJOx10C4NMAugA8D+AXUS18DwA4D8B+ANer6pGVxslr2x7PPC9qF0pyj6iNsW2P51QWJcfjQNQW2LaHyad84nEgypfcFiEmn/KJx4EoX3JbhJh8yiceB6J8yfU9oX0TU9g/MY3erg5Mz1Vw/mAvLhjs4z2hFrMOOXg+DqVSpRqaiBTFgmBdfzc6O5MVyJBCDiFtayAYTEjjzYovlOaFdBxKpQp2jU3ils89vrCtO7ZsxqZ1/U0XIu/F1lJI2xoQBhPSuIFdKAiGVnVj/UAvhlZ18wXSgJCOw9jk7EIBAqrbesvnHsfY5GzTY4UUwAhpW2mp3BYh3sD2IaTjUI607raWo+avNoS030LaVloqt0WIN7B9COk4FAtSd1uLCT6phbTfQtpWWiq3RYgtVHwI6Tis6+/Gji2bT9rWHVs2Y11/d9NjhbTfQtpWWiq3wQTA7w3s0FgvHOfZ7GwZh6fnFtJxa3u70N2dbNmukFoKhbStgch+UTsP5m9gU3asF47zrFyOsOfwFG6uScft3LIZm4ZXJSq6luev9wRaSNtKJ8vnj6PkRkjJp7HJ2YUCBFS39eaE6ThrIR2HkLY1D1iEKFUhJZ9Klah+Oq4SZTSj14R0HELa1jxgEaJUhZR86uwo1E/HdWT/MgvpOIS0rXmQ/auDci2k5NO6/m7sXJSO25kwHWctpOMQ0rbmQa7TcZSc50XtPPOcBLTsa+ddSOecU0zHUXLW6aKQUorFYgHnrO459RNbrFyOsHts0iy5511I51y7y9/ZR6eN6aL88Zzco7CxCNESTBflj+fkHoWNRYiWYLoofzwn9yhsPANzIooU48dncfDoNMaPzyJK0Ll5nvd0Ubkc4cVjM9g/MYUXj82gXE7+07zlfvPMc3KPwsZ0XA6EtHBcuRxh16HjJjfYQ2vv4jm5R7nDRe1CEtrCcVY32EMLYMwn984b7MM5q3tYgMgFnoU5EFKQwPIGe0j7jcgrFqEcCClIYHmDPaT9RuQVi1AOeA8SWLK8wR7SfiPyisGEDLE1TjKW7Wfmb9aXKhE6DW7Wez6mIZ0jlDm27fGOrXGSiSLF3sNTJvvNesE9y2NqfX6ElgSk9sHLcRkJLZllxXK/WR+DUOZGZIlFKCNMZiVjud+sj0EocyOyxCKUESazkrHcb9bHIJS5EVliEcoIk1nJWO4362MQytyILDEdl6FQFhnznPLyPDfr84PpOGohpuO8C2WRsTRSWZZJQOtUodV4aZwfoSQoqb3k592uzYSyyBhTWcmEcn4QsQhlJJRFxpjKSiaU84OIRSgjoSwyxlRWMqGcH0S5DiZ4vulsuS6O9dwsRZFi38QU9k9Mo7erA9NzFZw/2IsLBvtczM+a1XGwPj9C4/X1EBAGE7y3PSkUBL1dHfjEdW9aeHPu7epwMTdLUaSYnqvgYw89fdKbaRRp5nOzZnkcisUCNg2vwgM3XcFF6Jrk+fVAS53yk5CIDAP4TwDOUdW3isgbAVyhqp9pxQSBZJ+Exo/P4l23f+uk6+obBnrw4K1XJkoIeR7Pem6WXjw2g+vv+PaSuT1w0xU4Z3XPCt/Zfjwfh5DwOLhgurLqXwD4WwDnxH9/FsCHm59Ta3lve+K5xYulkG6wez4OIeFxaC+NFKG1qvoAgAgAVLUMwP3R9N72xHOLF0sh3WD3fBxCwuPQXhp5J5gSkUEACgAicjmAV1KdlQHvbU88t3ixZLkInXeej0NIeBzaSyP3hC4F8CcA3gTgaQBDAH5eVb+b/vSq8piOsx7PcxrIc3uikFrjeG4pZM3zcQhEwzu7oYi2iBQBbIwH3q2qpeRza15ee8eFwHNSqVSqYNfYJG6piUHv2LIZm9b1u3pDtWB5HELab5SYXTBBRN4N4B2oFqE3APi3InK1iKxLPj8Khee2PWOTswtvpEB1brfktDWO5XEIab9R+hr5f0IfBHAFgG/Ef78KwOMALhSR31XVz6Y0N8oBz0mlcqT1k3uR///A3SzL4xDSfqP0NRJMKAL4UVX9OVX9OQBvRDWk8C8AfDTNyVH785xUKhakfnIvh/cOLI9DSPuN0tdIETpXVQ/V/H0sfuwIgBXvDYnIPhH5nog8KSKj8WNrROQREdkT/z6QfPrkneek0rr+buxYlNzbweTeKYW03yh9jaTjbgdwHoAvxA/9HIADAH4NwFdU9V+u8L37AIyo6uGax/4AwBFV/aSI3AZgQFVX/ETlJZjAxE0y1vvNMpk1N1fG+NTcwlhDfV3o6krezcpz4tFyPOv9Rrlj2jvulwC8G8Cb47+PAhhW1SkAyxagFVyH6n0lALgbwDfRBpf1PKe8vLNcTM0ymRVFiucmpl32F/S8GKD1fqOwnfJynFY/Kj0PoAzgXagWnh80OL4C+JqIPC4i2+PHhlX1pfjPLwMYbm7K2fCc8gqJZTLL+phajuf5fPM8N2o/y34SEpE3AHhf/OswgPtRvXzXzKefN6vqwTjO/YiI7Kr9oqqqiNS9HhgXre0AcN555zXxT6bDc8orJJbJLPYDTMbz3Kj9rPRJaBeAtwB4u6q+WVX/BE32jFPVg/HvYwAeBHAZgEMicjYAxL+PLfO9d6rqiKqODA0NNfPPpsJzyisklsks9gNMxvPcqP2sVITeDeAlAN8QkbtE5Go004pBpE9EVs3/GcA1qLb9eRjA1vhpWwE8lGTireY55RUSy150afQDvOcDl+HP3/+TuH/75fjz9/8k7vnAZcn7Ad6waG43+Djf+FogS42k4/pQDRO8D9VPRvcAeFBVv3aK77sI1U8/QPWy3/9S1d+Pm6E+gGribj+A6+O497KYjqN55XKEfUem8MKRmYXFAM9d04ML1vRlviKtZZjAejut8bVAp2DbO27hydX/0/PvALxHVa9OMLFEvBQhyp7nRfIsF1PzvJ1EDTBd1G6Bqh6N79W0rAAR1fK8SJ7lDXvP20lkKfvP9URN8LxInuUNe8/bSWSJZzS1Fc+L5Fm3xvG6nUSWmronlBXeE2pv1jexy+Wo2ranEqHYUcC6/u7EN+s9t8bxvHCc5/1GLpi27SFKLI32M8ViweTmvPfWOHsPT7lsjWO939gSK2y8HEep8tzihXNLxnO7I2o/LEKUKs8tXji3ZDy3O6L2wyJEqfLc4oVzS8ZzuyNqPyxClCrPLV44t2TSaHfkdVspfUzHNYEJnmQs02zW5udWqkTodDa3tFKFFtvKdFw+GR4HpuOsMcGTTBQp9oxPutxvnucG2C4GWC5H2HXoOG6uWQxw55bN2DS8KlEhspxbGuNR87J6j/PxI18bYIInGc/7zfPcrI1Nzi4UIKC6rTcnXAyQ8imr1wOLUIOY4EnG837zPDdr7EVHp5LV64FFqEFM8CTjeb95nps19qKjU8nq9cAzsEFM8CTjeb95nps19qKjU8nq9ZDrdJx18slzystzWimklFc7zM3j+RtSStEzpuMMWaeBPCepvPfyCiXlZTk3zz33rFkfU0uhpWKzSCn6+FEjBdZpIM9JqpB6eXlOeVnOzfMxsOb5mIZ0HLKS2yJknQbynKQKqZeX55SX5dw8HwNrno9pSMchK7ktQtZpIM9JqpB6eXlOeVnOzfMxsOb5mIZ0HLKS22BCGveE9k1MYf/ENHq7OjA9V8H5g724YLAv82vDadwTstxWyxu75XKEfUem8MKRmYW5nbumBxes6Ut8XC3n9uKrM5grKwoCRAp0FQXnnNmT6J7Q4akTmCsrKpGioyDoKgrW9p3hIiBivd+s7wlZzS+0e0KGGt45uS1CgG0ayPPNU8D+DcbqhZdKaOLl49j22ZrxbhjBxrOyn5vlOTI3V8bu8SncUjPWji2bsXGoD11dzeeJPB9TwH61XOtzLpR0nCEWIWsvHpvB9Xd8+6TrwxsGevDATVe4TBydjvHjs3jX7d9asq0P3npl08kZy7G8z83yHDl4dBrvufPRJWPdv/1yrB/obXpunvebNe/zC0TDRSj7H+HbhOebp9Ysb8Z6Dk1Yz83yHClHWn+sKNkPjZ73mzXv86OTsQg1yPPNU2uWN2M9hyas52Z5jhQLUn+shJeBPO83a97nRyfL3ztoSkJqe2LZvsPzAmjWc7M8R4b6urBj0Vg7tmzGUA73mzXv86OT5fqeENv2+GjbY73fvKa8ANttnZsrY3xqDuVIUSwIhvq6EoUS5rXDfrN6rZZKlepxiPfduv5udHbyk1ALMZjgPc1myXOM1PPcyAfr12pIr33HGEzw3ArEmufWIp7nRj5Yv1ZDeu3nQW6LENNsPtJAnudGPli/VkN67edBbosQ02w+0kCe50Y+WL9WQ3rt50FujwrTbD7SQJ7nRj5Yv1ZDeu3nQW6DCYDvVJY1z3PzfBysE2iWqSzPx9Sa9TniOR0XyHHlonaA7SJe3lNeWSxG1QjrxQAtj4N1f7ZSqYJdY5NLxtu0rr/pN0Dv55s169fq3sNTLvddaMe1Ebm9HGeNKa9kPC+4Nz41t1Aw5se65XOPYzzh3MYmZ+uOx0XtWsvzvvM8t6ywCDWIKa9kPPeOs+7PZjkez7fkPO87z3PLCotQg5jySsZz7zjr/myW4/F8S87zvvM8t6zkOphgKYoUB49NY7ZmwbLuomD96l43rU88SmOBPM/3hPYfnV6y4N75A73J7gkZrZtUO6Z1KyarNjuWPN938Tw3YwwmWKtUIhybKS95wzprVYRCofmfYgI6GTFbjvCxh54+aTtPR3exgE9c96aFN/ruhG9+IoLB/k7cu+1yRKooiKCjo/p4UidKJ2/rzi2bE40TRYrOopy0nZ1FQRRp5sW7HdriWJ0j1goFwcbhVXjw1itz/cNnM/hJqEGeFxnzzPOidtbH1HI860UULfeb9wUeQ3ltOcfecdY8LzLmGYMJycazbj1jud+8t8UJ5bWVFyxCDfK8yJhnDCYkG8+69YzlfvPeFieU11Ze+Dhr2sC6/u66i4wlbQUSSjsbz4vaWR9Ty/GsW89Y7zfPbXFCeW3lRa7vCVmnz2Znyzg8/VqLl7W9XejuTp7t8JwwsmTdQsWy1c6JE2VMzLw21mBPF844I/kxtZyb9X6zHM9zK6ba+eX9teUY03HW6bNyOcKew1NmiSDrdjZelcsRdo9Nmu23UqlSN1adpDXOiRNl7JlYOtbFg32JClEUKZ6bmDY5ptatZ6yPg+eWWKG8tvIitz8aWLfHsF4oK5T2HWksWGbWGmemftueiZnsWwp5P38teW7tROnLbRGyTsh4Tit5Zr3fLBNonhOP3s9fS54TlJS+3BYh64SM57SSZ9b7zTKB5jnx6P38teQ5QUnpS/0MFJEOEfmOiHwl/vuFIvKYiOwVkftFJJXIinVCxnNaybM0FiyzSqAN9nTVHWuwJ/vknvfz15LnBCWlL/V0nIh8BMAIgDNV9e0i8gCAL6vqfSKyE8BTqrpjpTG8pOOs00qee3lZzs16v1mmFK3TcZ73m+cF97yPR03zkY4TkQ0A/g2A3wfwEak25XoLgF+In3I3gI8DWLEIJWW50FsaC2VZzc+6l5dlWimNlJdVSrFcjrB3wi7xCNgeU8s0m+VxSKPvofWijF4XeaSl0r4c998B/DqA+bufgwCOqWo5/vsBAOtTnoMJz4kbz8k9zykvz4mxkI4phS21IiQibwcwpqqPJ/z+7SIyKiKj4+PjxrNrnufEjefknueUl+fEWEjHlMKW5iehKwG8Q0T2AbgP1ctw/wPAahGZvwy4AcDBet+sqneq6oiqjgwNDaU4zcZ4Ttx4Tu55Tnl5ToyFdEwpbC1p2yMiVwH41TiY8AUAX6oJJnxXVW9f6fs9LOXgef2fcjnCviNTSxZTu2BNn4t7QtadK6zuf1nvN8AuNOH9Pp/X18I8BhMy1/DOzqIIXYTqJ6M1AL4DYIuqrnih20MRAvye2GksMma5rdZjWa3Uar3fZmfLePbw0jZAb1jbl7gQWfVnS2OFW4+vBaA9imQAfBWh0+WlCHnlfZExS54XZ7NeJM9SSAu9hbStjnFRu5B4vsFuzfPibNZtgCyFFCYIaVvzgEUoBzzfYLfmeXE26zZAlkIKE4S0rXmQv3epAHluyWLN8+Jsa3vrtwFa25t9u5iQWtmEtK15kOt7QiEtlOW5pZDnuVkvzmbZBsj6/LVccM9aWq9Vq1CH1xCGYz7a9mTJczTYmnVrHMt9VypVsGts0mQRunmWLVmsF2f756N2i9pZnr+WiwFa87yoHZN26fPxY3wKPLeLseZ5UTDLRei889wax/Nx8Hz+skVR+nJbhDy3i7HmeVEwz4kxa55b43g+Dp7PXybt0pfbIuS5XYw1z4uCeU6MWfPcGsfzcfB8/jJpl77s30FTwkXBfCwKZrkInXfeF7Xzehw8n79M2qWP6bgmWKe8LHlOeXleOM46MWaZoGQ6zseidkzHJcJ0HOB/UTsrlmkgoFo09kwsTVJdPNjXdPGYm6s/1sahvkRvgJZppbm5ct3E2OnMzfI4WJ+/z03YJPfS4HlROy6Ql67cXo6z5jklY54umpmrm6SamGl+vPGp+mONO0g+eZ6bNc9zo7CxCDXIc0rGc5LKOpXlObkX0jlCZIVFqEGeUzKek1TWqSzPyb2QzhEiKwwmNDHW7pePY9tna66p3zCCjWdlf009ihQHj01jtqwoCBAp0F0UrF/dm/ie0AuvzuBAzWJvG9b04NwzexLdE7K+7+L5npDlOeJ1HSaiBjCYkEYrkM6i4BPXvWnhRdxZFESRZv4ijiLFKzPlJS2Fzj4z2dyKxQLmyhE+9tDTC+PdccPmRCmvYrEDw2d24b7tl6MSKToKgq6ioHgaP4F3FwsnHYfuhOkzEcFgfyfu3XY5IlUURNDRUX08CctzJI12MbOLjuldN44kGofIUm4/CVkvbOV54TjruVmOZ30cLMezXoQulP1G1AAuahdS2x7ruVmO57kli3UwIZT9RmQpt0UopLY91nOzHM9zSxbrYEIo+43IUvbvoCkJqW2P9dwsx/MexY4/AAAVvklEQVTcksW6lU0o+43IUm7vCQH2bXasW+NYst5Wy/E8t8bxfI54bmXjeYFHcoHpuHI5wu6xSdNF6CwXQLOUxqJ2VuNZL6Zm3Rqns7MjUQhhOZbniNdWNp4XeKT2k9szxvMidNY8LwpmvZga289kL6TXFqUvt0XIc5rNmuckVUitcUIR0muL0pfbIuQ5zWbNc5IqpNY4oQjptUXpy+1Z4znNZs1zkso6gcaUV/ZCem1R+nKdjvOcZgNs00rWKS/LRJvndJx1ysvzYmpp7Devry3KHNNxgN80G2DbG8w6CWiZaLNeTM0yHWed8rI8pta946y31fNri9oLf3TJiHUCzTKtZJlo857cs9xvlnOz3m9MtJFXLEIZsUx5WaeVLBNtnpN71vvNcm4h9T6ksLEIZcQy5WWdVrJMtHlO7lnvN8u5hdT7kMIWRDDB6qaz5Q12y0XGrK/3l0qVuveYNia8J2S54J71vTTP94Qs9xu7HFCLNXyS5rYIWb/oPK8QCtimlUqlCvYfncYLNSurnrumB+cP9DZdhNJ4o7dcIdS615vV3EqlCnaNTZq1OwKYaKOWYhGyXujNegE0z4uMWW6r9XHwvN88L7hH1GJc1M7zzXrAd/sZy231fPPfmud2R0Re5bYIeb5ZD/huP2O5rZ5v/lvz3O6IyKvcFiHr1iJDfV11288MOWiNY82y1Y71cfC83zy3OyLyKrf3hAD7djEnTpQxMfPaeIM9XTjjjOTjeV5kzHPbHsvxrPeb5c1/6/1G1EJs21MuR3h2fMoslVUuR9g7YTce4HeRMctWO9bHwbKlUBr7zaqlkHW7IyKvcns5Lo1WNl7bnnhuP+O5pZDn/cbF+ygUuS1C1qksz21PPCfQPKcUPe83zylAIku5LULWqSzPbU88J9A8pxQ97zfPKUAiS9m/g6bEOpXleSEvzwm0NI5DCMk9zylAIku5TsdZp9k8L87mOQlo3S7Gcm6zs2Ucnn5trLW9Xeju9nFMrRe1sx6PaAVMx83NlbFnwq7XWxppO6tklvXcTpyov+8uHuxL9GZvuQBaqVSpO7ck6bhSqYJnD9uMBdim4wC79OT83Cx7FRJZye3luPGpubopqnEni4JZjmee8pqpv+8mZrJPZlmn46zGAnwn2jzPjcKW2yJk3XvLc9rOcwLNmuXcQuoH6HluFLbcFiHr3lue03aeE2jWLOcWUj9Az3OjsKVWhETkDBH5RxF5SkSeEZHfiR+/UEQeE5G9InK/iKQS97Hu9eY5bWee8uqpv+8Ge7JPZlmn4yz7s3lOtHmeG4UttXSciAiAPlWdFJFOAP8A4EMAPgLgy6p6n4jsBPCUqu5Yaayk6Tjr5JP1eJaJNuskoOcEmuV+K5Uq1eRePNa6/u7Ei8YBvhNo1n3yiFaQfTpOq9VtMv5rZ/xLAbwFwC/Ej98N4OMAVixCSUSR4vkjdr23rJNUlok26ySg5Xizs+W6++0Na/sSFSLrnmqdnR2mi8RZJtosWSf3iKyk+mOQiHSIyJMAxgA8AuA5AMdUtRw/5QCA9Wn829ZpIOsklWWizToJaDne4en6Yx2eTjY3pryS4X4jr1ItQqpaUdVLAGwAcBmATY1+r4hsF5FRERkdHx9v+t+2TgN5TttZz40JtPzhfiOvWnJBWFWPAfgGgCsArBaR+eswGwAcXOZ77lTVEVUdGRoaavrftE4DeU7bWc+NCbT84X4jr9IMJgwBKKnqMRHpAfA1AJ8CsBXAl2qCCd9V1dtXGitJMCGKFAePTWO2rCgIECnQXRSsX92b+J7QvqPTOHBkBr1dHZieq2DDmh5cMNCb+J7Q7kPHcVPNvZI7tmzGxoT3hPYfm1kyt/NX9yS+J2Q1Xhr3hHa/fBzbPltzb+OGEWw8K9m9Dc9BAsu5sWMCtVj2wQQAZwO4W0Q6UP3E9YCqfkVEvg/gPhH5PQDfAfCZNP7xSiXCsZnykje/s1ZFKBSaLxqVimK2FOFjDz19UpCgUlF0diabX1dnAZ+47k0Lb/RdnQVUKlHTRahQKGBu0dzu2LIZhUKyD7qqwFx50Xg3bEaSn1c6OgpY29+Je7ddjkgVBREUO6qPJ1HdP3LSfisWBZVK88fV8xtzGnPrLp58vnUzGUcO5LaB6cGj03jPnY+edB18w0AP7t9+eaI0lOfxXjw2g+vv+PaSsR646YpEPdtCmdv48Vm86/ZvLRnrwVuvzDzhZj03z9tKudTwT0q5/VHI88166/E8t+3xPDfPN+ut5+Z5WylsuS1Cnm/WW4/nuW2P57l5vllvPTfP20phy20RMm/JYtzKZm1v/fHW9ma/cJznuVkeV8+tbKzn5nlbKWy5vScE2LeL8dwah3NLNl4o6bg0xiNagYt0XKbK5Qh7Dvtd6G12tv54SaLLnudm3VLIcm6A3zY7gP3cPG8rhSu3l+O8L/Rm2c7G89ysWwpZtwEiomzltgh5TmVZj8e5+Vhwj4ial9si5DmVZT0e5+ZjwT0ial5ui5D3hd4sE2ie52a9uKDl3Igoe7lOx3lOZVmPx7nlNmND1I6YjrNOUVmnvCwTbdbpuFKpUne8JAv4We+3cjnC3gm71CMRZSu3r1rrFJV1yssy0WadjrNcwM96v1mnHokoW7ktQt5TWaEk0DwvBkhE2cttEfKeygolgeZ5MUAiyl5ugwmzs2W8PDWLUs2idp1FwVl93YnvCVkuHHfiRLnuvY3XJ7wn9MKrS+d27pk9ie8J7R6bXDK3jQnvCe0et70ntO/IFF6o2dZz1/TggjV9vCdE5AeDCarAq3UWtRvuTRbRjiLUXdQuSngVSAQ4Y9Gidmd0FiAJPiCI1F+ELslYAKCqdeeW5AeWYrEDw2d24b7tl6MSKToKgq6ioHga3ZtP1DkORNSecvtJyPMidNbjeZ6b9WJq1ovkEVEquKid55v11uN5npv1YmoMJhDlS26LkOeb9dbjeZ6b9WJqDCYQ5UtuX7nWrWw8t8axbmVj2WrHejE163ZMRJSt3N4TAvy3iwmlNc7cXBnjU6+NNdTXlSgZN69cjjA2OYtyJUKxo4B1/d1MxhH5wnScdSsbz+NZz82yNU6pVKkb0U7SAmhesVhgCIEoJ3L746N1KxvP46XRtseqNY5lCyAiyp/cFiHPiTHr8Ty3xuEidES0ktwWIc+JMevxPLfG4SJ0RLSS3BYh7+k4y/Gs52aZQFvX3113bkyzERHAdFxuxvM8N+t0XBQpJqbmMFeuoKvYgcG+LhQSfrKyHIuIFjAd5znNZj2e9dwsF6KLIsVzE9PYds/owlh33TiCjcOrEr3ZR5Fi96HjJuNZjkVEyeT2cpznNJv1eNZzs1yIbmJqbuFNfn6sbfeMYiLpYoCG41nPjYial9si5DnNZj2e57lZ946zHM96bkTUvNwWIc9pNuvxPM/Nunec5XjWcyOi5uU2mGC90NuJE2UceHVmyWJqG05jvOeOTOGmz7523+WOGzbjR9b4uCf07PjSjglvSHhPyPK+C+8JEbWFhl9AuS5CViuXpjWeVZEslSp4da6EE3PRQgLtjK4CzuzqTNQap1SqYP/R6SUF9/yB3kTjWafZ9k1MYf/E9MLczh/sxQWDfYmLGtNxROZYhDwv9GY9nue5WbNeJI+IUsFF7TzfrLcez/PcrDFMQJQvuS1Cnm/WW4/neW7WGCYgypfcFiHPbXasx7NujeO51Y71InlElK3c3hMCfLeysR7P89yseQ4TeJ4bUQuxbY/nNjvW43lu25OGQkFchhAY+SZqXm4vx3lus2M9nue2PSFhGyCi5uW2CHlPjDEdlz9M7hE1L7dFyHtijOm4/GFyj6h5uS1CntNs1uNZz22or/54Q0ygrYjJPaLmMR2Xk/E8zy0kTMcRAWA6zneazXq8UqlSd6xN6/oT9Xorl6O6ffI2Da9CsZjbD88mvCb3iLzK7TuK5zSb9Xhjk7N1xxqbnE00t7HJ2YUCND/ezacxHhHRcnJbhLwnxjyn40qVqP54lSjReEREy8ltEfKeGPOcjuvsKNQfryO3pwsRZSS1dxUROVdEviEi3xeRZ0TkQ/Hja0TkERHZE/8+kMa/7znNZj1eGr3jdi4ab6eT3nFElC+ppeNE5GwAZ6vqEyKyCsDjAN4J4P0AjqjqJ0XkNgADqvrRlcZiOu7USqUKxiZnF8Za19+dKJQwr1yOquNVIhQ7CljX381QAhE1yt+idiLyEID/Gf+6SlVfigvVN1V140rfm7QIERFRJnwtaiciFwD4CQCPARhW1ZfiL70MYHiZ79kuIqMiMjo+Pt6KaRIRUYulXoREpB/AlwB8WFVfrf2aVj+G1f0opqp3quqIqo4MDQ2lPU0iIspAqkVIRDpRLUCfV9Uvxw8fii/Dzd83GktzDkRE5Fea6TgB8BkAP1DVP6r50sMAtsZ/3grgobTmQEREvqXZtudKADcA+J6IPBk/9hsAPgngARH5IID9AK5PcQ5ERORYakVIVf8Byyckrk7r3yUiovbB//hBRESZYREiIqLMsAgREVFmWISIiCgzLEJERJQZFiEiIspMyxqYng4RGUf1/xQltRbAYaPpZIXb4AO3wQdugw/LbcNhVb22kQHaogidLhEZVdWRrOdxOrgNPnAbfOA2+GCxDbwcR0REmWERIiKizIRShO7MegIGuA0+cBt84Db4cNrbEMQ9ISIi8imUT0JERORQroqQiFwrIrtFZK+I3Fbn690icn/89cfiZcfdEJFzReQbIvJ9EXlGRD5U5zlXicgrIvJk/Ou3s5jrSkRkn4h8L57faJ2vi4j8cXwcvisil2Yxz+WIyMaa/fukiLwqIh9e9Bx3x0FE/kxExkTk6ZrH1ojIIyKyJ/59YJnv3Ro/Z4+IbK33nFZYZhv+UER2xefKgyKyepnvXfG8a5VltuHjInKw5nx52zLfu+J7WCssM//7a+a+r2Z5nsXf2/wxUNVc/ALQAeA5ABcB6ALwFIA3LnrOrQB2xn9+L4D7s573ovmdDeDS+M+rADxbZxuuAvCVrOd6iu3YB2DtCl9/G4C/QXWpj8sBPJb1nE9xXr0M4HzvxwHAzwC4FMDTNY/9AYDb4j/fBuBTdb5vDYDn498H4j8PONqGawAU4z9/qt42NHLeZbwNHwfwqw2cayu+h2U1/0Vf/68AftvqGOTpk9BlAPaq6vOqOgfgPgDXLXrOdQDujv/8RQBXxyvAuqCqL6nqE/GfjwP4AYD12c4qFdcBuEerHgWwen7Jd4euBvCcqp7Of5ZuCVX9OwBHFj1ce87fDeCddb71XwN4RFWPqOpRAI8AaOg/Glqrtw2q+jVVLcd/fRTAhpZPrAnLHIdGNPIelrqV5h+/X14P4F6rfy9PRWg9gBdq/n4AS9/AF54Tn9SvABhsyeyaFF8q/AkAj9X58hUi8pSI/I2I/FhLJ9YYBfA1EXlcRLbX+Xojx8qL92L5F5z34wAAw6r6UvznlwEM13lOOx2PD6D6KbqeU513Wfvl+JLiny1zWbQdjsNPAzikqnuW+XrTxyBPRSg3RKQfwJcAfFhVX1305SdQvTT04wD+BMBftnp+DXizql4K4K0AfklEfibrCSUhIl0A3gHgC3W+3A7H4SRavV7StnFYEflNAGUAn1/mKZ7Pux0AfgTAJQBeQvWSVjt6H1b+FNT0MchTEToI4Nyav2+IH6v7HBEpAngdgImWzK5BItKJagH6vKp+efHXVfVVVZ2M//zXADpFZG2Lp7kiVT0Y/z4G4EFULzPUauRYefBWAE+o6qHFX2iH4xA7NH+pM/59rM5z3B8PEXk/gLcD+PdxMV2igfMuM6p6SFUrqhoBuAv15+b6OMTvme8GcP9yz0lyDPJUhP4JwMUicmH8E+x7ATy86DkPA5hP/vw8gP+z3Amdhfh662cA/EBV/2iZ55w1fx9LRC5D9Ri6KaQi0iciq+b/jOpN5acXPe1hADfGKbnLAbxSc8nIk2V/6vN+HGrUnvNbATxU5zl/C+AaERmILxNdEz/mgohcC+DXAbxDVaeXeU4j511mFt3zfBfqz62R97As/SyAXap6oN4XEx+DVicv0vyFaurqWVQTJr8ZP/a7qJ68AHAGqpdW9gL4RwAXZT3nRfN/M6qXS74L4Mn419sA3Azg5vg5vwzgGVSTM48C+Kms571oGy6K5/ZUPM/541C7DQLgT+Pj9D0AI1nPu8529KFaVF5X85jr44BqwXwJQAnV+wkfRPWe59cB7AHwvwGsiZ87AuDTNd/7gfh1sRfALzrbhr2o3iuZf03MJ1zPAfDXK513jrbhs/G5/l1UC8vZi7ch/vuS9zAP848f/4v587/muad9DNgxgYiIMpOny3FERNRmWISIiCgzLEJERJQZFiEiIsoMixAREWWGRYgIgIhU4s6/T4vIF0SkN+s5NUpE/l/WcyBKikWIqGpGVS9R1TcBmEP1/wQtiP9jrcvXi6r+VNZzIErK5YuKKGN/D+D1InJBvLbLPaj+z+9zReQaEfm2iDwRf2LqBwAReVu85s3jUl0r6Svx4x+PG1Z+U0SeF5Ffmf9HROQv4+c/U9vsUUQmReT34+aoj4rIcPz4sFTX03kq/vVT88+v+d5fE5F/ihtl/k78WJ+I/FX8PU+LyHtasA+JGsIiRFQj7o/1VlT/dzsAXAzgdlX9MQBTAH4LwM9qtUnjKICPiMgZAO4A8FZV3QxgaNGwm1BdLuEyAP8x7g8IAB+Inz8C4FdEZL6jex+AR7XaHPXvAGyLH/9jAP83fvxSVP9Xeu3cr4nnexmqjTI3xw0krwXwoqr+ePxJ76vJ9xCRLRYhoqoeqa4WOQrgh6j28AOA/Vpd8wioLsD3RgDfip+7FcD5qBaZ51X1n+PnLe4391eqOquqh1FtIDq/nMKviMh8259zUS0gQPVy4FfiPz8O4IL4z29BtRsztNoM85VF/8418a/voNrle1M85vcA/CsR+ZSI/HSd7yPKTDHrCRA5MaOql9Q+EPcnnap9CNXF39636HknfV8dszV/rgAoishVqDaEvEJVp0Xkm6j2NgSAkr7WT6uCxl+nAuA/q+odS75QXUL9bQB+T0S+rqq/2+CYRKniJyGixj0K4EoReT2wcK/lDQB2A7hIqgsRAkAj91xeB+BoXIA2ofop61S+DuCW+N/uEJHXLfr63wL4QM19qvUisk5EzgEwraqfA/CHqF7KI3KBn4SIGqSq4/G6NveKSHf88G+p6rMiciuAr4rIFKot+U/lqwBuFpEfoFrEHj3F8wHgQwDuFJEPovoJ6RYA366Z39dE5EcBfDv+FDcJYAuA1wP4QxGJUO2MfEsD/xZRS7CLNpEBEelX1cl4jaE/BbBHVf9b1vMi8o6X44hsbIvDCs+geqltyX0ZIlqKn4SIiCgz/CRERESZYREiIqLMsAgREVFmWISIiCgzLEJERJQZFiEiIsrM/wda7CbhY2cTxAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Set the threshold to select only highly correlated attributes\n",
    "threshold = 0.5\n",
    "# List of pairs along with correlation above threshold\n",
    "corr_list = []\n",
    "size = train_coor.shape[0]\n",
    "cols=train.columns \n",
    "#Search for the highly correlated pairs\n",
    "for i in range(0, size): #for 'size' features\n",
    "    for j in range(i+1,size): #avoid repetition\n",
    "        if (train_coor.iloc[i,j] >= threshold and train_coor.iloc[i,j] < 1):\n",
    "            corr_list.append([train_coor.iloc[i,j],i,j]) #store correlation and columns index\n",
    "\n",
    "#Sort to show higher ones first            \n",
    "s_corr_list = sorted(corr_list,key=lambda x: -abs(x[0]))\n",
    "\n",
    "#Print correlations and column names\n",
    "for v,i,j in s_corr_list:\n",
    "    print (\"%s and %s = %.2f\" % (cols[i],cols[j],v))\n",
    "# Scatter plot of only the highly correlated pairs\n",
    "for v,i,j in s_corr_list:\n",
    "    sns.pairplot(train, size=6, x_vars=cols[i],y_vars=cols[j] )\n",
    "    pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 从原始数据中分离输入特征x和输出y\n",
    "y = train['Outcome'].values\n",
    "X = train.drop('Outcome', axis = 1)\n",
    "#将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 随机采样20%的数据构建测试样本，其余作为训练样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)\n",
    "X_train.shape\n",
    "#用于后续显示权重系数对应的特征\n",
    "columns = X.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/preprocessing/data.py:617: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  return self.partial_fit(X, y)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/base.py:462: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  return self.fit(X, **fit_params).transform(X)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/ipykernel_launcher.py:9: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  if __name__ == '__main__':\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(614, 8)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.transform(X_test)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### default Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "lr= LogisticRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is:  [0.46129644 0.46510588 0.56426612 0.44377717 0.46617809]\n",
      "cv logloss is: 0.48012474004701106\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 交叉验证用于评估模型性能和进行参数调优（模型选择）\n",
    "#分类任务中交叉验证缺省是采用StratifiedKFold\n",
    "from sklearn.model_selection import cross_val_score\n",
    "loss = cross_val_score(lr, X_train, y_train, cv=5, scoring='neg_log_loss')\n",
    "print('logloss of each fold is: ',-loss)\n",
    "print('cv logloss is:', -loss.mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化的 Logistic Regression及参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "logistic回归的需要调整超参数有：C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和正则函数penalty（L2/L1） \n",
    "目标函数为：J = sum(logloss(f(xi), yi)) + C* penalty \n",
    "\n",
    "在sklearn框架下，不同学习器的参数调整步骤相同：\n",
    "设置候选参数集合\n",
    "调用GridSearchCV\n",
    "调用fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='warn',\n",
       "          n_jobs=None, penalty='l2', random_state=None, solver='warn',\n",
       "          tol=0.0001, verbose=0, warm_start=False),\n",
       "       fit_params=None, iid='warn', n_jobs=None,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "#需要调优的参数\n",
    "# 请尝试将L1正则和L2正则分开，并配合合适的优化求解算法（slover）\n",
    "#tuned_parameters = {'penalty':['l1','l2'],\n",
    "#                   'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "#                   }\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss')\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00200763, 0.00177379, 0.00147495, 0.00188532, 0.00207915,\n",
       "        0.00186491, 0.00212445, 0.00196762, 0.00190163, 0.00160975,\n",
       "        0.00184164, 0.00198603, 0.00208526, 0.00197072]),\n",
       " 'std_fit_time': array([7.81872181e-04, 4.09273486e-04, 3.70635883e-04, 3.16542112e-04,\n",
       "        6.44785486e-04, 2.83531520e-04, 5.34525003e-04, 5.02438008e-04,\n",
       "        2.61917801e-04, 9.32620100e-05, 3.38251778e-04, 3.80513065e-04,\n",
       "        5.65445686e-04, 1.78207986e-04]),\n",
       " 'mean_score_time': array([0.0011817 , 0.00106869, 0.00095663, 0.00109677, 0.00111203,\n",
       "        0.00094924, 0.0010901 , 0.00124092, 0.00106912, 0.00086861,\n",
       "        0.00093222, 0.00110941, 0.00111084, 0.00104699]),\n",
       " 'std_score_time': array([1.61045466e-04, 3.20600200e-04, 1.05494076e-04, 1.35033127e-04,\n",
       "        2.80727906e-04, 1.52045089e-04, 2.44993549e-04, 3.67913393e-04,\n",
       "        2.63759335e-04, 6.05906753e-05, 1.84526739e-04, 2.54020575e-04,\n",
       "        2.83480729e-04, 2.45239098e-04]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([-0.69314718, -0.64371675, -0.66946739, -0.52816851, -0.48618138,\n",
       "        -0.4678555 , -0.46345764, -0.46129644, -0.46108851, -0.46088502,\n",
       "        -0.46086592, -0.4608487 , -0.46084379, -0.46084513]),\n",
       " 'split1_test_score': array([-0.69314718, -0.64113725, -0.67517494, -0.52518603, -0.47166078,\n",
       "        -0.47077815, -0.46426335, -0.46510588, -0.46463449, -0.46473286,\n",
       "        -0.4646899 , -0.46469927, -0.46469166, -0.46469595]),\n",
       " 'split2_test_score': array([-0.69314718, -0.64575466, -0.6680453 , -0.5512625 , -0.54753009,\n",
       "        -0.54301469, -0.56469466, -0.56426612, -0.56847596, -0.56834734,\n",
       "        -0.5687978 , -0.56879096, -0.56883121, -0.5688357 ]),\n",
       " 'split3_test_score': array([-0.69314718, -0.63856226, -0.67581323, -0.50975335, -0.45503451,\n",
       "        -0.44706595, -0.44365852, -0.44377717, -0.44397875, -0.44400066,\n",
       "        -0.4440287 , -0.4440332 , -0.44403536, -0.44403656]),\n",
       " 'split4_test_score': array([-0.69314718, -0.64152376, -0.67221592, -0.52767402, -0.47216314,\n",
       "        -0.47104103, -0.46582687, -0.46617809, -0.46606587, -0.46612355,\n",
       "        -0.4661171 , -0.4661268 , -0.4661255 , -0.46612722]),\n",
       " 'mean_test_score': array([-0.69314718, -0.64214833, -0.6721329 , -0.52844007, -0.48658808,\n",
       "        -0.47999943, -0.48043616, -0.48017599, -0.48090066, -0.48086932,\n",
       "        -0.48095138, -0.48095123, -0.48095695, -0.48095956]),\n",
       " 'std_test_score': array([0.        , 0.00243715, 0.00305426, 0.0132657 , 0.03205993,\n",
       "        0.03276814, 0.04294171, 0.04285084, 0.04453377, 0.04448689,\n",
       "        0.04466503, 0.04466183, 0.04467842, 0.04467945]),\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  1,  3,  2,  5,  4,  7,  6,  8,  9],\n",
       "       dtype=int32),\n",
       " 'split0_train_score': array([-0.69314718, -0.64085132, -0.66189542, -0.52529099, -0.47823887,\n",
       "        -0.47085398, -0.46684283, -0.46669378, -0.46662379, -0.46662226,\n",
       "        -0.46662151, -0.46662149, -0.46662149, -0.46662148]),\n",
       " 'split1_train_score': array([-0.69314718, -0.64188719, -0.67797602, -0.52532854, -0.47970383,\n",
       "        -0.47076994, -0.46692726, -0.46678157, -0.46671609, -0.4667146 ,\n",
       "        -0.4667139 , -0.46671388, -0.46671388, -0.46671388]),\n",
       " 'split2_train_score': array([-0.69314718, -0.63908575, -0.66162164, -0.5135644 , -0.45564372,\n",
       "        -0.44783203, -0.44194591, -0.44184498, -0.44173185, -0.44173047,\n",
       "        -0.44172922, -0.4417292 , -0.44172919, -0.44172919]),\n",
       " 'split3_train_score': array([-0.69314718, -0.64333601, -0.67874616, -0.5309552 , -0.4838263 ,\n",
       "        -0.47509784, -0.47066669, -0.47052445, -0.4704446 , -0.47044314,\n",
       "        -0.47044227, -0.47044226, -0.47044225, -0.47044225]),\n",
       " 'split4_train_score': array([-0.69314718, -0.64131272, -0.67371601, -0.52389506, -0.47771387,\n",
       "        -0.46916638, -0.46505738, -0.46489609, -0.46482211, -0.46482048,\n",
       "        -0.46481965, -0.46481964, -0.46481963, -0.46481963]),\n",
       " 'mean_train_score': array([-0.69314718, -0.6412946 , -0.67079105, -0.52380684, -0.47502532,\n",
       "        -0.46674403, -0.46228801, -0.46214818, -0.46206769, -0.46206619,\n",
       "        -0.46206531, -0.4620653 , -0.46206529, -0.46206529]),\n",
       " 'std_train_score': array([0.        , 0.00138524, 0.00757197, 0.00566626, 0.00992519,\n",
       "        0.00965834, 0.01033385, 0.01031565, 0.01033123, 0.01033118,\n",
       "        0.01033136, 0.01033136, 0.01033136, 0.01033136])}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view the complete results (list of named tuples)\n",
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4799994349368312\n",
      "{'C': 0.1, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "# examine the best model\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.001, 0.01, 0.1, 1, 10, 100, 1000]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#pd.DataFrame(grid.cv_results_).to_csv('LogisticGridSearchCV_Otto.csv')\n",
    "#cvresult = pd.DataFrame.from_csv('LogisticGridSearchCV_Otto.csv')\n",
    "#test_means = cv_results['mean_test_score']\n",
    "#test_stds = cv_results['std_test_score'] \n",
    "#train_means = cvresult['mean_train_score']\n",
    "#train_stds = cvresult['std_train_score'] \n",
    "\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'neg-logloss' )\n",
    "pyplot.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图给出了L1正则和L2正则下、不同正则参数C对应的模型在训练集上测试集上的正确率（score）。可以看出在训练集上C越大（正则越少）的模型性能越好；但在测试集上当C=0.1时性能最好（L1在C=1时少许更优）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用LogisticRegressionCV实现正则化的 Logistic Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### L1正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.01, 0.1, 1, 10], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=None, penalty='l1',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [0.01,0.1,1,10]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L1正则 --> 可选用saga优化求解器(0.19版本新功能)\n",
    "# LogisticRegressionCV比GridSearchCV快\n",
    "lrcv_L1 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l1', solver='liblinear', multi_class='ovr')\n",
    "lrcv_L1.fit(X_train, y_train)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.66946739, -0.48618187, -0.46345836, -0.46108669],\n",
       "        [-0.67517494, -0.4716747 , -0.46426384, -0.46463642],\n",
       "        [-0.6680453 , -0.547525  , -0.5646961 , -0.56847494],\n",
       "        [-0.67581323, -0.45503441, -0.44366066, -0.44397578],\n",
       "        [-0.67221592, -0.47216387, -0.46582258, -0.46606788]])}"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# scores_：dict with classes as the keys, and the values as the grid of scores obtained during cross-validating each fold,\n",
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "n_Cs = len(Cs)\n",
    "\n",
    "scores =  np.zeros((1,n_Cs))\n",
    "\n",
    "scores[0][:] = np.mean(lrcv_L1.scores_[1],axis = 0)\n",
    "\n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个score似乎和GridSearchCV得到的Score不一样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.41999578,  1.11865103, -0.23270316,  0.03881135, -0.10270172,\n",
       "         0.72283861,  0.20821249,  0.13339275]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "惩罚不够，没有稀疏系数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### L2正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.01, 0.1, 1, 10], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=None, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [0.01,0.1,1,10]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L2正则 --> 缺省用lbfgs，为了和GridSeachCV比较，也用liblinear\n",
    "\n",
    "lr_cv_L2 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l2', solver='liblinear', multi_class='ovr')\n",
    "lr_cv_L2.fit(X_train, y_train)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.52816851, -0.4678555 , -0.46129644, -0.46088502],\n",
       "        [-0.52518603, -0.47077815, -0.46510588, -0.46473286],\n",
       "        [-0.5512625 , -0.54301469, -0.56426612, -0.56834734],\n",
       "        [-0.50975335, -0.44706595, -0.44377717, -0.44400066],\n",
       "        [-0.52767402, -0.47104103, -0.46617809, -0.46612355]])}"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_cv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# dict with classes as the keys, and the values as the grid of scores obtained during cross-validating each fold,\n",
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "n_Cs = len(Cs)\n",
    "scores =  np.zeros((1,n_Cs))\n",
    "\n",
    "scores[0][:] = np.mean(lr_cv_L2.scores_[1],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.01, 0.1, 1, 10], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=None, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='lbfgs', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [0.01,0.1,1,10]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L2正则 --> 缺省用lbfgs\n",
    "# LogisticRegressionCV比GridSearchCV快\n",
    "lrcv_L2 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l2', multi_class='ovr')\n",
    "lrcv_L2.fit(X_train, y_train)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.51262426, -0.46638657, -0.46123062, -0.46087948],\n",
       "        [-0.51173486, -0.47008743, -0.46514695, -0.46473614],\n",
       "        [-0.53491378, -0.54301284, -0.56460343, -0.56838869],\n",
       "        [-0.49812966, -0.4478786 , -0.44409951, -0.44403687],\n",
       "        [-0.50753083, -0.46757852, -0.46583857, -0.46609211]])}"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# dict with classes as the keys, and the values as the grid of scores obtained during cross-validating each fold,\n",
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "n_Cs = len(Cs)\n",
    "scores =  np.zeros((1,n_Cs))\n",
    "scores[0][:] = np.mean(lrcv_L2.scores_[1],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 线性SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=10000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.75      0.89      0.81        99\n",
      "           1       0.69      0.45      0.55        55\n",
      "\n",
      "   micro avg       0.73      0.73      0.73       154\n",
      "   macro avg       0.72      0.67      0.68       154\n",
      "weighted avg       0.73      0.73      0.72       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[88 11]\n",
      " [30 25]]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "from sklearn import metrics\n",
    "SVC1 = LinearSVC().fit(X_train, y_train)\n",
    "SVC1.max_iter=10000\n",
    "y_predict = SVC1.predict(X_test)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"\n",
    "      % (SVC1, metrics.classification_report(y_test, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_test, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM正则参数调优\n",
    "线性SVM LinearSVC的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和正则函数penalty（L2/L1） "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC2 =  LinearSVC( C = C)\n",
    "    SVC2 = SVC2.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "/home/zhe/.local/lib/python3.6/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7272727272727273\n",
      "accuracy: 0.7337662337662337\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7337662337662337\n",
      "accuracy: 0.7077922077922078\n",
      "accuracy: 0.6493506493506493\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzt3Xm0VNWZ9/HvwxxFHBiUSQZBE8yKRq8YI0FACReRQZNXIXYUBC8mmph0Jm21TbDNZHfM23lNLzWaRDutMY6oCCKYoEYiF4NRQBBR9KoIopggItPz/rFP9S3GKu6tU7uG32etWt4691TVUwL1q3Oes/c2d0dERGRvWsQuQERESp/CQkREclJYiIhITgoLERHJSWEhIiI5KSxERCQnhYWIiOSksBARkZwUFiIiklOr2AUUSqdOnbx3796xyxARKSsLFy58x90759qvYsKid+/e1NfXxy5DRKSsmNmqfPbTaSgREclJYSEiIjkpLEREJKeK6VmIiFS7LVu20NDQwKZNm3b5Xbt27ejRowetW7du0nMrLEREKkRDQwMHHHAAvXv3xsz+d7u7s27dOhoaGujTp0+TnjvV01BmVmtmy8xshZldtpvfX29mi5LbcjNbv9PvO5hZg5n9vzTrFBGpBJs2baJjx447BAWAmdGxY8fdHnHkK7UjCzNrCdwADAcagAVmNt3dl2T2cfdvZu3/NeDTOz3NNcC8tGoUEak0OwdFru35SvM01EBghbuvBDCzO4GxwJI97D8BuDpzx8yOBw4FZgI1KdYpJWb1anj0UVixInYlhXPkkfD5z0OXLrErEWmaNMOiO/B61v0G4MTd7WhmvYA+wNzkfgvgP4B/Ak5LsUYpAZs3w1NPwaxZ4bZoUePvmvllqCRkL3N/3HEwYkS4ffaz0MReo0jRlUqDezxwt7tvS+5/FZjh7g17O3QyszqgDuDwww9PvUgpnBUrGsNh7lz44ANo1QpOPhl++EOorYVjjoEWFXBx9/bt8Oyzje/3pz+FH/0IDjgAhg1rDI++fWNXKpXA3Xd7ysmzv7U0QZph8QbQM+t+j2Tb7owHLs66fxLwOTP7KtAeaGNmG9x9hya5u98E3ARQU1PTvP8Tkqp//AMefzx8WM6cCStXhu19+8J554UPy6FDoUOHuHWmoUULqKkJtyuugPffDwGZCY8HHgj79e/fGBxDhkD79lHLljLUrl071q1bt0uTO3M1VLt27Zr83NbctNnjE5u1ApYDpxJCYgHwJXdfvNN+Hyf0Jfr4booxs4lAjbtfsrfXq6mpcc0NVTq2b4fnnmv8QHzqKdiyBfbfP4TCiBHh6KFfv9iVxuUOy5c3/n/64x9h40Zo0wYGDWoMj099qjJOyUm6mjLOwswWunvOvnBqYZEUcTrwc6AlcKu7X2tm04B6d5+e7PN9oN3ORw1ZzzERhUVZWLMGZs9u/OBbsyZsP+aYxnD47Gehbdu4dZayTZvgyScb/x8+/3zY3rVraJCPGAHDh0OnTnHrlMpREmFRTAqL4tuyBZ5+uvHU0rPPhu2dOoUPtNra8N+uXePWWc7eeCNcGTZrVgjid98NRxg1NY1HHZ/5TOj3iDSFwkJS8corjeEwd27oRbRsCSedFMJhxIhwxU8lNKZLzbZtsHBh+H8/axbMnx9O93XoAKed1hgevXrFrlTKicJCCuKDD8J59MwH1Esvhe29ejWGw7BhcOCBUcusSu+9B3PmNJ6yej25UP2ooxr/bE45BfbbL26dUtoUFtIk7uE8eebo4cknwziIj32ssTE9YkQYZKaGa+lwhxdfbAz1P/0p9D/atoXBgxv/3I4+Wn9usiOFheRt3bpwPnzmzHB+/K23wvZPfrLxG+qgQdCMq+6kyD78EJ54ojE8liTzJnTvHhrltbXh1NUhh8StU+JTWMgebd0Kf/lL4wdJfX34ZnrIIaEhPWJE+EDp3j12pVIor7/eeLrqscdg/frQVzrhhMYvBCecoEZ5NVJYyA5WrWr8sJgzJwwMa9EiXEmTOUVRUxOa1VLZtm6FBQsavyw880z4snDQQeFoIxMePXrErlSKQWFR5TZuhHnzGj8QXnwxbO/ZszEcTj0VDj44bp0S37vvhqONzN+VN98M2wcMaBwf87nPhb6VVB6FRZVxD+elM//g582Djz4KfYZTTmkMiE98Qg1O2TN3WLy48QKHJ57Y8e/R6afDhRcqOCqJwqIKZL4RZk4vvZHMvJX5RjhiRLgSRv+wpak2bgxXVmXCY9kyGD0a7r1X/Y1KkW9Y6I+7jGzbFs4vZ8LhmWfCoKzMueZMQPTsmfu5RPKx334wcmS4Afzyl3DxxfCVr8BNN+kotZooLEpcQ8OOV7G89174BzpwIFx5ZTifrKtYpFi++tXQ07j2WujWDX7wg9gVSbHoI6bEbNoU+g2ZgFiczNHbrRuMG6fr4yW+a64JY3GmTQvzfl10UeyKpBgUFpFlRt5mT1G9aVOYonrwYJg0SSNvpbSYwY03wttvh1NShx4KZ54ZuypJm8IigvXrG+f0mTlzxzl96urC0YPm9JFS1qoV/P734fLrCRPCKdJBg2JXJWlSWBRBZrbQzNHD/PlhW4cO4R/blVdqtlApP/vvDw89FJbCHT06zCN29NGxq5K0KCxS8uabYZ6lmTN3XIfg+OPh8stDOJx4Iuy0aJVIWenUKXwBykxR//TTGvldqRQWBfLRR+GbVWZQXGaFs8MOC9+6tMKZVKrevcPf+8GDQ2A88YRmBqhECosmcg9rO2T6Dpm1k1u3DlMj/OQnWjtZqscxx8D994ewGDs2/LvQYNDKorDYB3//e1gdLnP08OqrYXu/fnDBBSEchgyB9u1jVikSx9ChcPvtMH48nHsu/OEPmpiykigs9mL79rCudKYx/fTTYcbO9u1DY/q73w0B0bdv7EpFSsPZZ8Pq1XDppXDJJWHEt46sK4PCYierV4fG9KxZoTG9dm3Yftxx8J3vhHA46aQwDkJEdvX1r4d5yn7607AmypVXxq5ICqHqw2LLltCYzhw9LFoUtnfp0jjX0vDhYeCRiOTnRz8Ko7yvuipc5DFlSuyKpLmqPizefhuGDQuDjE4+GX74wxAQxx4bFgcSkX3XogXccgusWQNTp4YvW6NHx65KmqPqw6JHj3Da6cQTwyA5ESmM1q3h7rtD4/ucc8KsBSedFLsqaSp9dyacZlJQiBRe+/bw8MNhIswzzmhcsVHKj8JCRFLVpUvoB7ZqFU7xZpZtlfKisBCR1B1xBMyYEaa9qa0Nk2lKeVFYiEhRHH98WI516dKwNsumTbErkn2hsBCRohk+HH7zm7Cu95e/HGZflvKgsBCRojr3XPj3fw9XSn3jG2GeNSl9VX/prIgU37e+FRrdP/tZGOV92WWxK5JcFBYiEsV114VR3pdfHtbyPv/82BXJ3igsRCSKFi1C/2LtWpg8OVxiO3Jk7KpkT9SzEJFo2rSBe+4J67588YvwzDOxK5I9UViISFQdOoQxGIceCqNGhUXFpPSkGhZmVmtmy8xshZnt0sIys+vNbFFyW25m65Ptx5rZ02a22Mz+ZmbnpFmniMR12GFhlDeEUd6rV8etR3aVWliYWUvgBmAkMACYYGYDsvdx92+6+7HufizwC+De5FcbgfPc/WigFvi5mR2UVq0iEl///uEI4+234fTTw8qUUjrSPLIYCKxw95Xuvhm4Exi7l/0nAHcAuPtyd38p+flNYA3QOcVaRaQEnHBCGH/xt7/BWWfB5s2xK5KMNMOiO/B61v2GZNsuzKwX0AeYu5vfDQTaAC/v5nd1ZlZvZvVrM0vaiUhZGzkyrIUxZw5MnBiWN5b4SqXBPR642913GPxvZl2B24FJ7r7LXxl3v8nda9y9pnNnHXiIVIrzzw+r7d1xR1jOWOJLc5zFG0DPrPs9km27Mx64OHuDmXUAHgaucPf5qVQoIiXre99rHOXdrVsY9S3xpBkWC4D+ZtaHEBLjgS/tvJOZfRw4GHg6a1sb4D7gNne/O8UaRaREmcH114cro7797XDF1Lnnxq6qeqV2GsrdtwKXALOApcBd7r7YzKaZ2ZisXccDd7rvMJ3Y2cBgYGLWpbXHplWriJSmli3htttgyJDQv3j00dgVVS/zCpnysaamxuvr62OXISIpeP99GDwYVq6EP/4xrI0hhWFmC929Jtd+pdLgFhHZowMPhEcegUMOCWMwXt7l2khJm8JCRMpCt25hlPfWrWGU95o1sSuqLgoLESkbH/84PPRQuEpq1CjYsCF2RdVDYSEiZeWkk+Cuu+Cvfw0z1W7ZErui6qCwEJGyc8YZcOON4bTU5MlamrUYtPiRiJSlyZPDSntXXRX6GT/+ceyKKpvCQkTK1hVXhP7FT34Slma99NLYFVUuhYWIlC0z+MUvwrTm3/xmGOV9jla/SYV6FiJS1lq2hN/9DgYNgvPOg7m7zF0thaCwEJGy164dPPBAWEBp3DhYtCh2RZVHYSEiFeHgg8Mo7wMPDGtivPpq7Ioqi8JCRCpGz54wcyZs2hRGeb/zTuyKKofCQkQqytFHw4MPwmuvhfEYH3wQu6LKoLAQkYozaFBYZW/BAjj7bI3yLgSFhYhUpHHj4IYbYMYMmDpVo7ybS+MsRKRiXXRRGOU9bVoY5f1v/xa7ovKlsBCRivb974dR3tdeG0Z5X3xx7IrKk8JCRCqaGfzXf4VR3l/7Whjl/YUvxK6q/KhnISIVr1UruPNO+Mxn4NxzYd682BWVH4WFiFSF/fYLl9T26QNjxsDzz8euqLwoLESkanTsGAbt7b9/WMt748bYFZUPhYWIVJVeveD226GhAf7wh9jVlA+FhYhUnaFD4aijwmp7kh+FhYhUHTOoq4Onn1bvIl8KCxGpSuedB23awM03x66kPCgsRKQqdeoEX/xi6F+o0Z2bwkJEqlZdHaxfD3ffHbuS0qewEJGqNXgwHHmkGt35UFiISNXKNLr//Gd44YXY1ZS2vMLCzO41s1FmpnARkYpy/vlqdOcj3w//XwJfAl4ysx+b2VEp1iQiUjSdOoWJBW+7DT78MHY1pSuvsHD3x9z9XOA44FXgMTP7s5lNMrPWaRYoIpI2Nbpzy/u0kpl1BCYCU4C/Av+XEB6zU6lMRKRITjkF+vdXo3tv8u1Z3Ac8AewHjHb3Me7+e3f/GtA+zQJFRNKWaXQ/9RQsXhy7mtKU75HFf7r7AHf/kbu/lf0Ld6/Z04PMrNbMlpnZCjO7bDe/v97MFiW35Wa2Put355vZS8nt/LzfkYhIE5x/PrRurUb3nuQbFgPM7KDMHTM72My+urcHmFlL4AZgJDAAmGBmA7L3cfdvuvux7n4s8Avg3uSxhwBXAycCA4GrzezgPGsVEdlnnTvDWWep0b0n+YbFhe7+v9/63f094MIcjxkIrHD3le6+GbgTGLuX/ScAdyQ/jwBmu/u7yWvNBmrzrFVEpEmmToX33oN77oldSenJNyxampll7iRHDW1yPKY78HrW/YZk2y7MrBfQB5i7r48VESmUIUOgXz81uncn37CYCfzezE41s1MJRwAzC1jHeOBud9+2Lw8yszozqzez+rVr1xawHBGpRplG95NPwpIlsaspLfmGxfeAx4GvJLc5wHdzPOYNoGfW/R7Jtt0ZT+MpqLwf6+43uXuNu9d07tw5RzkiIrmp0b175u7pPLFZK2A5cCrhg34B8CV3X7zTfh8nHKX08aSYpMG9kDCOA+BZ4Hh3f3dPr1dTU+P19fUFfx8iUn3OOQdmz4Y334R27WJXky4zW7i3q1oz8h1n0d/M7jazJWa2MnPb22PcfStwCTALWArc5e6LzWyamY3J2nU8cKdnpVYSCtcQAmYBMG1vQSEiUkhqdO8qryMLM3uScCnr9cBoYBLQwt3/Nd3y8qcjCxEplO3bwxrdXbvCvHmxq0lXQY8sgI+5+xxCuKxy9+8Do5pToIhIqWrRAi68EJ54ApYujV1Nacg3LD5Kpid/ycwuMbMz0TQfIlLBJk5UoztbvmFxKWFeqK8DxwP/BGgKDhGpWF26wLhx8NvfwqZNsauJL2dYJAPwznH3De7e4O6T3P0L7j6/CPWJiEQzdSq8+y7ce2/sSuLLGRbJQLlBRahFRKSkDB0KRxyhEd2Q/2mov5rZdDP7spmdlbmlWpmISGSZRve8efDii7GriSvfsGgHrAOGES6dHQ2ckVZRIiKlYuJEaNVKje5W+ezk7pPSLkREpBQdemhjo/vaayt/RPee5BUWZvZrYJfRe+5+QcErEhEpMVOnhvW577sPJkyIXU0c+Z6Gegh4OLnNAToAG9IqSkSklAwbBn37wk03xa4knnxPQ+0wQ4qZ3QE8mUpFIiIlJtPovvxyWLYsTAVSbfI9sthZf6BLIQsRESll1d7oznfW2X+Y2d8zN+BBwhoXIiJV4bDDYOxY+M1v4KOPYldTfHmFhbsf4O4dsm5H7nxqSkSk0k2dCuvWhUZ3tcn3yOJMMzsw6/5BZjYuvbJERErPqadCnz7V2ejOt2dxtbu/n7nj7usJ61uIiFSNTKP78cdh+fLY1RRXvmGxu/3yupJKRKSSTJpUnY3ufMOi3sx+ZmZHJLefEdbIFhGpKocdBmPGVF+jO9+w+BqwGfg9cCewCbg4raJERErZ1Knwzjtw//2xKymevNbgLgdag1tEimX79jB1ed++MGdO7Gqap6BrcJvZbDM7KOv+wWY2qzkFioiUq0yje+5ceOml2NUUR76noTolV0AB4O7voRHcIlLFJk2Cli2rp9Gdb1hsN7PDM3fMrDe7mYVWRKRadO0aGt2//nV1NLrzDYsrgCfN7HYz+2/gT8Dl6ZUlIlL6Mo3uBx6IXUn68p3uYyZQAywD7gC+BXyYYl0iIiVv+HDo1as6RnTn2+CeQljH4lvAt4Hbge+nV5aISOnLNLrnzIEVK2JXk658T0NdCpwArHL3ocCngfV7f4iISOWrlkZ3vmGxyd03AZhZW3d/EajC5T9ERHbUrRuMHh0a3Zs3x64mPfmGRUMyzuJ+YLaZPQCsSq8sEZHyUVcHa9dWdqN7n0dwm9kpwIHATHcvmRzVCG4RiWXbtjCiu39/mD07djX7pqAjuLO5+5/cfXopBYWISEwtW8KUKfDYY5Xb6G7qGtwiIpIl0+j+1a9iV5IOhYWISAF07w5nnFG5jW6FhYhIgdTVwZo1MH167EoKT2EhIlIgI0bA4YdX5ojuVMPCzGrNbJmZrTCzy/awz9lmtsTMFpvZ/2Rt/2mybamZ/aeZWZq1iog0V6bRPXs2vPxy7GoKK7WwMLOWwA3ASGAAMMHMBuy0T3/ChIQnu/vRwDeS7Z8FTgY+BXySMHr8lLRqFREplAsuCNOAVFqjO80ji4HACndfmVxmeycwdqd9LgRuSNbHwN3XJNsdaAe0AdoCrYG3U6xVRKQgMo3uW2+trEZ3mmHRHXg9635Dsi3bkcCRZvaUmc03s1oAd38aeBx4K7nNcvelO7+AmdWZWb2Z1a9duzaVNyEisq8yje4HH4xdSeHEbnC3AvoDQ4AJwM1mdpCZ9QM+AfQgBMwwM/vczg9295vcvcbdazp37lzEskVE9qy2Fnr2rKxGd5ph8QbQM+t+j2RbtgZgurtvcfdXgOWE8DgTmO/uG9x9A/AIcFKKtYqIFEym0f3oo7ByZexqCiPNsFgA9DezPmbWBhgP7Hz18f2EowrMrBPhtNRK4DXgFDNrZWatCc3tXU5DiYiUqkprdKcWFu6+FbgEmEX4oL/L3Reb2TQzG5PsNgtYZ2ZLCD2K77j7OuBu4GXgeeA54Dl3r6CzfyJS6Xr0gFGjQqN7y5bY1TTfPs86W6o066yIlJqHHgprXdxzD5x1Vuxqdi+1WWdFRCQ/I0eGI4xKaHQrLEREUpLd6H7lldjVNI/CQkQkRRdcAGbl3+hWWIiIpKhnTzj99PJvdCssRERSVlcHq1eHhne5UliIiKSsEhrdCgsRkZS1agWTJ8OsWfDqq7GraRqFhYhIEZR7o1thISJSBIcfHk5HlWujW2EhIlIkdXXw1lvw8MOxK9l3CgsRkSI5/fSwOFI5NroVFiIiRZJpdM+cWX6NboWFiEgRTZ4c/nvLLXHr2FcKCxGRIso0um+5BbZujV1N/hQWIiJFVo6NboWFiEiRjRoF3bqVV6NbYSEiUmSZRvcjj8CqVbGryY/CQkQkgnJrdCssREQi6NULamvLp9GtsBARiaSuDt58E2bMiF1JbgoLEZFIRo2Crl3Lo9GtsBARiaR168ZG92uvxa5m7xQWIiIRTZ4M7qXf6FZYiIhE1Ls3jBhR+o1uhYWISGR1dfDGG+F0VKlSWIiIRHbGGXDYYaXd6FZYiIhElml0z5gBr78eu5rdU1iIiJSAUm90KyxEREpAnz7w+c+XbqNbYSEiUiLq6qChIaykV2oUFiIiJWL06NJtdCssRERKROvWcMEFYVGkhobY1exIYSEiUkKmTIHt20uv0a2wEBEpIZlG969+Bdu2xa6mUaphYWa1ZrbMzFaY2WV72OdsM1tiZovN7H+yth9uZo+a2dLk973TrFVEpFSUYqM7tbAws5bADcBIYAAwwcwG7LRPf+By4GR3Pxr4RtavbwOuc/dPAAOBNWnVKiJSSsaMgUMPLa1Gd5pHFgOBFe6+0t03A3cCY3fa50LgBnd/D8Dd1wAkodLK3Wcn2ze4+8YUaxURKRmZRvdDD4U5o0pBmmHRHcgeuN6QbMt2JHCkmT1lZvPNrDZr+3ozu9fM/mpm1yVHKiIiVaHUGt2xG9ytgP7AEGACcLOZHZRs/xzwbeAEoC8wcecHm1mdmdWbWf3atWuLVbOISOr69oXhw0un0Z1mWLwB9My63yPZlq0BmO7uW9z9FWA5ITwagEXJKaytwP3AcTu/gLvf5O417l7TuXPnVN6EiEgsdXVhYsFZs2JXkm5YLAD6m1kfM2sDjAem77TP/YSjCsysE+H008rksQeZWSYBhgFLUqxVRKTkjBkDXbqURqM7tbBIjgguAWYBS4G73H2xmU0zszHJbrOAdWa2BHgc+I67r3P3bYRTUHPM7HnAgJvTqlVEpBS1aVM6jW5z97gVFEhNTY3X19fHLkNEpKBefhn69YNp0+Cqqwr//Ga20N1rcu0Xu8EtIiJ7ccQRcNpp8RvdCgsRkRJXVwevvQaPPhqvBoWFiEiJGzs2fqNbYSEiUuLatIFJk+DBB+HNN+PUoLAQESkDU6aEnsWtt8Z5fYWFiEgZ6NcPTj01XqNbYSEiUibq6mDVKpg9u/ivrbAQESkT48ZB585xGt0KCxGRMpFpdE+fDm+9VdzXVliIiJSRWI1uhYWISBnp3x+GDYObbw7rXRSLwkJEpMzEaHQrLEREysy4cdCpU3Eb3QoLEZEy07Zt8RvdCgsRkTI0ZQps3Qq//nVxXk9hISJSho48EoYOLV6jW2EhIlKm6urg1VfhscfSfy2FhYhImTrzTOjYsTiN7lbpv4SIiKShbVv453+GjRvBHczSey2FhYhIGfuXfynO6+g0lIiI5KSwEBGRnBQWIiKSk8JCRERyUliIiEhOCgsREclJYSEiIjkpLEREJCdz99g1FISZrQVWNeMpOgHvFKicmCrlfYDeS6mqlPdSKe8Dmvdeerl751w7VUxYNJeZ1bt7Tew6mqtS3gfovZSqSnkvlfI+oDjvRaehREQkJ4WFiIjkpLBoVMTVbFNVKe8D9F5KVaW8l0p5H1CE96KehYiI5KQjCxERyUlhkTCza8zsb2a2yMweNbNusWtqKjO7zsxeTN7PfWZ2UOyamsrM/o+ZLTaz7WZWdleumFmtmS0zsxVmdlnseprDzG41szVm9kLsWprDzHqa2eNmtiT5u3Vp7JqayszamdkzZvZc8l5+kNpr6TRUYGYd3P3vyc9fBwa4+0WRy2oSM/s8MNfdt5rZTwDc/XuRy2oSM/sEsB24Efi2u9dHLilvZtYSWA4MBxqABcAEd18StbAmMrPBwAbgNnf/ZOx6msrMugJd3f1ZMzsAWAiMK8c/FzMzYH9332BmrYEngUvdfX6hX0tHFolMUCT2B8o2Rd39UXffmtydD/SIWU9zuPtSd18Wu44mGgiscPeV7r4ZuBMYG7mmJnP3ecC7setoLnd/y92fTX7+B7AU6B63qqbxYENyt3VyS+WzS2GRxcyuNbPXgXOBf41dT4FcADwSu4gq1R14Pet+A2X6oVSpzKw38GngL3EraToza2lmi4A1wGx3T+W9VFVYmNljZvbCbm5jAdz9CnfvCfwOuCRutXuX670k+1wBbCW8n5KVz3sRKTQzaw/cA3xjpzMLZcXdt7n7sYQzCAPNLJVThK3SeNJS5e6n5bnr74AZwNUpltMsud6LmU0EzgBO9RJvTO3Dn0u5eQPomXW/R7JNIkvO798D/M7d741dTyG4+3ozexyoBQp+EUJVHVnsjZn1z7o7FngxVi3NZWa1wHeBMe6+MXY9VWwB0N/M+phZG2A8MD1yTVUvaQrfAix195/Frqc5zKxz5mpHM/sY4WKKVD67dDVUwszuAY4iXHmzCrjI3cvyW6CZrQDaAuuSTfPL+MquM4FfAJ2B9cAidx8Rt6r8mdnpwM+BlsCt7n5t5JKazMzuAIYQZjh9G7ja3W+JWlQTmNkg4AngecK/d4B/cfcZ8apqGjP7FPBbwt+vFsBd7j4tlddSWIiISC46DSUiIjkpLEREJCeFhYiI5KSwEBGRnBQWIiKSk8JCZB+Y2Ybce+318XebWd/k5/ZmdqOZvWxmC83sj2Z2opm1MbN5ZlZVg2altCksRIrEzI4GWrr7ymTTrwgT8/V39+OBSUCnZNLBOcA5cSoV2ZXCQqQJLLgumcPqeTM7J9newsx+mawnMtvMZpjZF5OHnQs8kOx3BHAicKW7bwdw91fc/eFk3/uT/UVKgg5zRZrmLOBY4BjCiOYFZjYPOBnoDQwAuhCmv741eczJwB3Jz0cTRqNv28PzvwCckErlIk2gIwuRphkE3JHM+Pk28CfCh/sg4A/uvt3dVwOPZz2mK7A2nydPQmRzsjiPSHQKC5Hi+RBol/y8GDgmWU1vT9oCm1KvSiQPCguRpnkCOCdZeKYzMBh4BngK+EIBzBY2AAAA20lEQVTSuziUMPFexlKgH4C7vwzUAz9IZkHFzHqb2ajk547AO+6+pVhvSGRvFBYiTXMf8DfgOWAu8N3ktNM9hBXxlgD/DTwLvJ885mF2DI8pwKHACjN7AfgNYbUzgKHJ/iIlQbPOihSYmbV39w3J0cEzwMnuvjpZb+Dx5P6eGtuZ57gXuMzdlxehZJGcdDWUSOE9lCxI0wa4JjniwN0/NLOrCetwv7anBycLJd2voJBSoiMLERHJST0LERHJSWEhIiI5KSxERCQnhYWIiOSksBARkZwUFiIiktP/B54YwDt943fIAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, X_train, y_train, X_test, y_test)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "\n",
    "pyplot.show()\n",
    "  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM和Logistic回归的比较\n",
    "SVM只考虑分类面附近的点，大大节省了内存开销。但不直接提供概率估计，通过交叉验证计算，代价比较高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优\n",
    "\n",
    "RBF核是SVM最常用的核函数。\n",
    "RBF核SVM 的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和核函数的宽度gamma\n",
    "C越小，决策边界越平滑； \n",
    "gamma越小，决策边界越平滑。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC\n",
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_test, y_test):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7077922077922078\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7337662337662337\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7077922077922078\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.7272727272727273\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7467532467532467\n",
      "accuracy: 0.6623376623376623\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7337662337662337\n",
      "accuracy: 0.6558441558441559\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-1, 3, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_test, y_test)\n",
    "        accuracy_s.append(tmp)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
